如何从 postgres 获取时间戳作为 Unix 纪元?
Posted
技术标签:
【中文标题】如何从 postgres 获取时间戳作为 Unix 纪元?【英文标题】:How to get timestamp as Unix epoch from postgres? 【发布时间】:2011-03-24 15:12:51 【问题描述】:我想从 Postgres 获取数据。时间戳类型中有一列没有时区。简单的 SELECT 返回我格式化的日期,但我想要以毫秒为单位的时间戳。我如何在 SQL 中做到这一点?
【问题讨论】:
【参考方案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 确实如此。看看更新后的答案是否能更好地解释它。以上是关于如何从 postgres 获取时间戳作为 Unix 纪元?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 jsonb 列中的 unix 整数设置 postgres 时间戳列?
在 postgres 中,如何从事件日志类型表(具有时间戳)中获取特定时间范围内字段的总和(或汇总)
如何从 JS 中的 Y-m-d 日期获取 unix 时间戳?