如何从Postgres的时间戳列获得具有微秒精度的Epoch?

时间:2018-05-08 05:31:31

标签: sql postgresql

在Postgres中,我正在尝试创建一个精确到微秒的时间戳字段。

如果我以可打印格式查询时间戳,它会显示具有精确微秒的日期,但如果我查询纪元,则它只显示5位数...

示例

CREATE TABLE date_test (datetime timestamp(6) WITH TIME ZONE);

INSERT INTO date_test VALUES(TO_TIMESTAMP(1525745241.879112));

SELECT datetime FROM date_test; //returns 2018-05-08 12:07:21.879112+10
SELECT EXTRACT(epoch FROM datetime) from date_test; //returns 1525745241.87911

最后一位数丢失的原因是什么?查询本身是否转换为浮点并丢失准确性?有什么简单的方法可以在Postgres中以微秒精度存储日期吗?

1 个答案:

答案 0 :(得分:3)

它很丑陋,但是在头顶上:

t=# select extract(epoch from TO_TIMESTAMP(1525745241.879112) - '1000000000 seconds'::interval)::numeric(20,6) + 1000000000;
     ?column?
-------------------
 1525745241.879112
(1 row)

https://www.postgresql.org/docs/current/static/functions-datetime.html extract返回double precision which is 15十进制数字精度,因此微秒不适合......