PostgreSQL(9.6.5)在没有时区的时区之间转换返回时间戳

问题描述 投票:0回答:1

让我们从测试表开始:

CREATE TABLE test
(
    ts_tz timestamp with time zone
);

让我们插入一行数据:

INSERT INTO
    test (ts_tz)
VALUES
    (TIMESTAMP WITH TIME ZONE '2016-08-12 10:22:31.949271-00')
;

现在,让我们查询这一行:

postgres=# select * from test;
             ts_tz             
-------------------------------
 2016-08-12 03:22:31.949271-07

好吧,到目前为止这对我来说很有意义。 ts_tz是一个带时区的时间戳,它显示为03:22,偏移量为-07,因为这就是我的时区。

现在,假设我想将时区更改为“美国/太平洋”。

postgres=# select ts_tz AT TIME ZONE 'US/Pacific' from test;
          timezone          
----------------------------
 2016-08-12 03:22:31.949271 

但是现在这会返回一个没有时区的TIMESTAMP。

为什么是这样?如何将其保留为时区的TIMESTAMP?

sql postgresql sqldatatypes
1个回答
1
投票

这就是AT TIME ZONE构建的工作方式 - timestamptz成为timestamp without timezone,反之亦然:

https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-ZONECONVERT enter image description here

如果你想在某个时区指定timestamp with zone使用SET,例如:

t=# set timezone to 'EST';
SET
t=#  select * from test;
             ts_tz
-------------------------------
 2016-08-12 05:22:31.949271-05
(1 row)
© www.soinside.com 2019 - 2024. All rights reserved.