Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 存储时区数据的时间戳_Postgresql - Fatal编程技术网

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中是这样的: