我想从Postgres获取数据。时间戳类型中有一列没有时区。简单的SELECT返回格式化日期,但我想简单地以毫秒为单位的时间戳。我怎么能在SQL中做到这一点?
答案 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)
无论哪种方式,它都会在毫秒精度下继续工作一段时间。