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