迄今为止的 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 双精度的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 铸造复合材料类型

将 Csv 文件导入到 postgres Cloud SQL 实例无效输入语法错误

Postgres 中数字数据类型的精度和小数位数是多少?

Postgres的双引号问题

在 postgres 行中找到最大差异

是否有一个 postgres 命令来列出/删除所有物化视图?