4
我想从Postgres获取数据。类型时间戳中有一列没有时区。简单的SELECT返回格式化的日期,但我只需要毫秒的时间戳。我如何在SQL中做到这一点?如何从postgres获取时间戳作为时间戳?
我想从Postgres获取数据。类型时间戳中有一列没有时区。简单的SELECT返回格式化的日期,但我只需要毫秒的时间戳。我如何在SQL中做到这一点?如何从postgres获取时间戳作为时间戳?
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
返回 “双精度” 号,它符合15位的Postgres的。这意味着在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)
无论哪种方式,它会继续工作,只是罚款毫秒精度一会儿。
太棒了!它的工作原理,谢谢你! – Kamilos 2010-08-03 09:30:15
如果你需要毫秒精度,这个建议不起作用 – Wiebke 2016-09-13 13:46:23
@Wiebke它的确如此。看看更新的答案是否更好地解释它。 – 2016-09-20 14:37:37