【问题标题】:How to get timestamp as Unix epoch from postgres?如何从 postgres 获取时间戳作为 Unix 纪元?
【发布时间】:2011-03-24 15:12:51
【问题描述】:

我想从 Postgres 获取数据。时间戳类型中有一列没有时区。简单的 SELECT 返回我格式化的日期,但我想要以毫秒为单位的时间戳。我如何在 SQL 中做到这一点?

【问题讨论】:

    标签: sql postgresql epoch


    【解决方案1】:
    select extract(epoch from my_timestamp)
    

    这会以秒为单位返回时间。但是,它是一个小数点后有小数部分的小数。在下面阅读有关精度的更多信息。

    对于毫秒,使用:

    select extract(epoch from my_timestamp)*1000
    

    测试:

    select my_date, 
    extract(epoch from my_date)*interval'1s'+'epoch'::timestamp at time zone 'GMT'
    

    关于精度的说明

    extract 返回一个“双精度”数字,它适合 Postgres 中的 15 位数字。这意味着在 2016 年左右(在我写这篇文章时),实际精度为 10 微秒。请注意它如何四舍五入最后一位数字:

    select extract('epoch' from '2016-09-20T11:22:33.456789Z'::timestamp);
        date_part     
    ------------------
     1474370553.45679
    (1 row)
    

    对于未来 270 年这样的日期,这种数据类型只能表示 100 微秒的精度。从 2016 年的角度来看,这似乎是一个不错的精度,我想在我们到达那一年之前情况可能会有所改变。

    select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
        date_part     
    ------------------
     10120936953.4568
    (1 row)
    

    无论哪种方式,它都会在毫秒精度下继续工作一段时间。

    【讨论】:

    • 如果您需要毫秒精度,此建议无济于事
    • @Wiebke 确实如此。看看更新后的答案是否能更好地解释它。
    猜你喜欢
    • 2020-02-21
    • 2021-07-09
    • 1970-01-01
    • 2021-04-24
    • 2018-08-03
    • 2023-02-26
    • 2017-12-14
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多