在 PostgreSQL 中,如何获取表日期字段的纪元(UTC 时间),其时区假定为 GMT,其小时、分钟、秒值假定为“00:00:00”?
例如 mytable.DT_GMT 的值类似于“2018-10-16”。
这是我迄今为止尝试过的。我刚刚使用了“2018-10-16”,而不是 DT_GMT。一旦我有一些有用的东西,我就会用表字段替换它。
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 ...
请注意, hours...sec 是必要的,因为没有它,这些值不是必需的。
postgres=> SELECT TIMESTAMP '2018-10-16' AT TIME ZONE 'GMT';
timezone
------------------------
2018-10-15 17:00:00-07
(1 row)
您将它们添加为date
和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
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句