Postgresql 存储时区数据的时间戳
我有两列,一列名为“日期”,另一列名为“时间”。日期是日期数据类型,“时间”是字符数据类型。我使用下面的查询来选择一个新的组合时间戳列Postgresql 存储时区数据的时间戳,postgresql,Postgresql,我有两列,一列名为“日期”,另一列名为“时间”。日期是日期数据类型,“时间”是字符数据类型。我使用下面的查询来选择一个新的组合时间戳列 SELECT to_timestamp(concat_ws(' ',air_date,air_time),'yyyy-MM-dd HH24:MI:SS') as datetime FROM table1 这将返回正确的时间戳,但带有“+00”时区。我想明确地告诉查询时区在“EST5EDT”中,这样我就可以得到“+04”或“+05”作为时区。我尝试了以
SELECT
to_timestamp(concat_ws(' ',air_date,air_time),'yyyy-MM-dd HH24:MI:SS') as datetime
FROM table1
这将返回正确的时间戳,但带有“+00”时区。我想明确地告诉查询时区在“EST5EDT”中,这样我就可以得到“+04”或“+05”作为时区。我尝试了以下操作,但收到一个错误
SELECT
to_timestamp(concat_ws(' ',air_date,air_time,'EST5EDT'),'yyyy-MM-dd HH24:MI:SS TZ') as datetime
FROM table1
错误:“TZ”/“TZ”/“OF”格式模式在最新版本中不受支持
SQL状态:0A000
如何选择包含EST5EDT时区信息的时间戳列?如果您只是将yoru tz添加到时间戳转换中,它将添加适当的小时数:
t=# select
concat_ws(' ','2016-08-16'::date,'10:00:00'::time,'EST5EDT')::timestamptz
, concat_ws(' ','2016-08-16'::date,'10:00:00'::time)::timestamptz;
concat_ws | concat_ws
------------------------+------------------------
2016-08-16 14:00:00+00 | 2016-08-16 10:00:00+00
(1 row)
如果我没弄错的话,你想在相同的日期和时间加上TZ“值”吗?那么这可能会有帮助:
t=# set timezone = EST5EDT;
SET
t=# select
concat_ws(' ','2016-08-16'::date,'10:00:00'::time,'EST5EDT')::timestamptz
, concat_ws(' ','2016-08-16'::date,'10:00:00'::time)::timestamptz;
concat_ws | concat_ws
------------------------+------------------------
2016-08-16 10:00:00-04 | 2016-08-16 10:00:00-04
(1 row)
那不太管用。当我这样做的时候,假设输入的日期时间是“UTC”,然后将其转换为“EST5EDT”。我需要postgres先将输入时间解释为“EST5EDT”,然后再转换。对不起,是错误的,出于某种原因,我认为
to_timestamp
返回没有时区的timestamp
。但是,您的格式受支持,因此您可以使用简单的强制转换,如concat_ws(“”,air_date,air_time,'EST5EDT')::timestamptz
。根据此格式,它返回“带时区的时间戳”,至少在postgres 9.5中是这样的: