to_timestamp用于存储时区数据

时间:2016-08-16 17:50:55

标签: postgresql

我有两列,一列名为“日期”,另一列名为“时间”。 Date是日期数据类型,“time”是字符数据类型。我正在使用以下查询来选择新的组合时间戳列

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
  

错误:to_date不支持“TZ”/“tz”/“OF”格式模式

     

SQL状态:0A000

如何选择包含EST5EDT时区信息的时间戳列?

1 个答案:

答案 0 :(得分:0)

如果您只是将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)