如何将时间戳作为postgres的时间戳?

时间:2010-08-03 09:17:22

标签: sql postgresql

我想从Postgres获取数据。时间戳类型中有一列没有时区。简单的SELECT返回格式化日期,但我想简单地以毫秒为单位的时间戳。我怎么能在SQL中做到这一点?

1 个答案:

答案 0 :(得分:6)

select extract(epoch from my_timestamp)

以秒为单位返回时间。但是,它是一个十进制数,小数点后的第二个分数。阅读以下有关精度的更多信息。

对于millis,请使用:

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)

无论哪种方式,它都会在毫秒精度下继续工作一段时间。