迄今为止的 Postgres 双精度
Posted
技术标签:
【中文标题】迄今为止的 Postgres 双精度【英文标题】:Postgres Double Precision to Date 【发布时间】:2018-12-15 16:11:35 【问题描述】:我希望将十进制数据转换/转换为日期数据。我上网查了一下,还在苦苦挣扎。你能帮我吗? “value”是双精度的,这里我把它转换成varchar。从那时起,我尝试使用 convert,但仍然无法获得日期值。
提前致谢!
select cast(value as varchar(8) )date_value, value,
例如:值 43099 应为 2017 年 12 月 30 日。
【问题讨论】:
请说明double precision
值在解释为date
时的含义。自 1970-01-01 以来的秒数,截断到午夜?
@LaurenzAlbe,我添加了一个屏幕截图。示例:我们的数据库将日期存储为值:43099(应显示 12/30/2017)
举个例子很好,但请定义这些数字的语义。
也许:自 1900-xx-yy 以来的天数?
@wildplasser:几乎也是我的猜测。
【参考方案1】:
从你微薄的例子中猜测,你可能想要这个:
SELECT date '1899-12-30' + 43099; -- returns date '2017-12-30'
为此,您需要将 value
列转换为 integer
:
SELECT date '1899-12-30' + value::int;
意思是,这个数字可能代表自 1900 年以来的天数(我无法解释一个 off-by-2 错误)。
将integer
添加到date
意味着添加天数。
如果您的 value
可以有小数位,您可以用类似的方式计算时间戳:
SELECT timestamp '1899-12-30' + interval '1 day' * value;
【讨论】:
以上是关于迄今为止的 Postgres 双精度的主要内容,如果未能解决你的问题,请参考以下文章