我想从 Postgres 获取数据。时间戳类型中有一列没有时区。简单的 SELECT 返回我格式化的日期,但我想要以毫秒为单位的时间戳。我如何在 SQL 中做到这一点?
问问题
4304 次
1 回答
7
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)
无论哪种方式,它都会在一段时间内继续以毫秒精度正常工作。
于 2010-08-03T09:23:37.350 回答