2010-08-03 132 views

回答

6
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) 

无论哪种方式,它会继续工作,只是罚款毫秒精度一会儿。

+0

太棒了!它的工作原理,谢谢你! – Kamilos 2010-08-03 09:30:15

+0

如果你需要毫秒精度,这个建议不起作用 – Wiebke 2016-09-13 13:46:23

+0

@Wiebke它的确如此。看看更新的答案是否更好地解释它。 – 2016-09-20 14:37:37