如何在PostgreSQL中获取串联时间戳记的EPOCH

时间:2018-10-17 02:11:43

标签: postgresql

在PostgreSQL中,如何获取表日期字段的纪元(UTC时间),该字段的时区假定为GMT,而小时,分钟,秒的值假定为'00:00:00'? / p>

例如mytable.DT_GMT的值类似于“ 2018-10-16”。

这是到目前为止我尝试过的。我没有使用DT_GMT,而是使用了'2018-10-16'。一旦发现有问题,我将用表字段替换它。

postgres=> select extract(epoch from TIMESTAMP WITH TIME ZONE concat('2018-10-16',' 00:00:00.00-00') );
ERROR:  syntax error at or near "concat"
LINE 1: ...elect extract(epoch from TIMESTAMP WITH TIME ZONE concat('20...

尝试一些相关的事情:

postgres=> SELECT TIMESTAMP ('2018-10-16' || ' 00:00:00.00') AT TIME ZONE 'GMT';
ERROR:  syntax error at or near "'2018-10-16'"
LINE 1: SELECT TIMESTAMP ('2018-10-16' || ' 20:38:40') AT TIME ZONE ...

请注意,小时...秒是必需的,因为没有它,这些值就不是必需的。

postgres=> SELECT TIMESTAMP '2018-10-16' AT TIME ZONE 'GMT';
        timezone
------------------------
 2018-10-15 17:00:00-07
(1 row)

1 个答案:

答案 0 :(得分:3)

add them as date and time with time zone代替了字符串连接。

test=> select extract(epoch from date '2018-10-16' + time with time zone '00:00:00.00-00');
 date_part  
------------
 1539648000
(1 row)

如果仅添加“ 00:00:00”以使时区正常工作,则不需要date

test=> select date_part('epoch', date '2018-10-16');
 date_part  
------------
 1539648000

$ date --date '@1539648000' --utc
Tue Oct 16 00:00:00 UTC 2018

这是将日期和时间存储为适当类型的一个很好的理由,尤其是在Postgres中,它非常关心类型,而不是text