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

Kam*_*los 4 sql postgresql

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

Kon*_*rus 6

select extract(epoch from my_timestamp)
Run Code Online (Sandbox Code Playgroud)

以秒为单位返回时间.但是,它是一个十进制数,小数点后的第二个分数.详细了解下面的精度.

对于millis,使用:

select extract(epoch from my_timestamp)*1000
Run Code Online (Sandbox Code Playgroud)

测试:

select my_date, 
extract(epoch from my_date)*interval'1s'+'epoch'::timestamp at time zone 'GMT'
Run Code Online (Sandbox Code Playgroud)

注意精度

extract返回一个"双精度"数字,在Postgres中适合15位数.这意味着在2016年左右(我写这篇文章),实际精度是10微秒.请注意它如何舍入最后一位数:

select extract('epoch' from '2016-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 1474370553.45679
(1 row)
Run Code Online (Sandbox Code Playgroud)

对于未来270年的日期,此数据类型只能表示100微秒的精度.从2016年的角度来看,这似乎是一个不错的精确度,我想在我们达到那一年之前,情况可能会有所改变.

select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 10120936953.4568
(1 row)
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,它将继续工作一段时间内毫秒精度.