【问题标题】:How to get Epoch with Microsecond accuracy from a timestamp column in Postgres?如何从 Postgres 中的时间戳列获取具有微秒精度的 Epoch?
【发布时间】:2018-05-08 05:31:30
【问题描述】:

在 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 中以微秒精度存储日期?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    它很丑,但在头顶:

    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 十进制数字精度,所以微秒不适合...

    【讨论】:

    • 感谢您的回答!我不知道 double 具有 15 位精度...我同意计算并不理想,但它确实有用...当我努力将其放入我的 ORM 中时,我最终将日期存储为数字( 16,6) 场...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2020-04-13
    相关资源
    最近更新 更多