TIMESTAMP AT TIME ZONE
将指定的 TIMESTAMP
或 TIMESTAMPTZ
(TIMESTAMP WITH TIMEZONE
) 转换为另一个时区。Vertica 以不同方式执行 AT TIME ZONE
,具体取决于日期输入是 TIMESTAMP
还是 TIMESTAMPTZ
。请参阅下面的 TIMESTAMP 与 TIMESTAMPTZ 行为。
语法
timestamp‑clause AT TIME ZONE 'zone'
参数
TIMESTAMP 与 TIMESTAMPTZ 行为
Vertica 如何解释 AT TIME ZONE
取决于日期输入是 TIMESTAMP
还是 TIMESTAMPTZ
:
您可以通过两种方式指定时区:
-
字符串字面量,例如
America/Chicago
或PST
-
指定 UTC 偏移量的时间间隔 — 例如,
INTERVAL '‑08:00'
使用指示地理位置的字面量来指定时区通常是一种很好的做法。Vertica 会进行必要的季节性调整,从而避免结果不一致。例如,以下两个查询在夏令时生效时发出。因为白天的本地 UTC 偏移量是 ‑04
,所以两个查询返回相同的结果:
=> SELECT TIMESTAMPTZ '2017-03-16 09:56:13' AT TIME ZONE 'America/Denver' "Denver Time";
Denver Time
---------------------
2017-03-16 07:56:13
(1 row)
=> SELECT TIMESTAMPTZ '2017-03-16 09:56:13' AT TIME ZONE INTERVAL '-06:00' "Denver Time";
Denver Time
---------------------
2017-03-16 07:56:13
(1 row)
如果您在标准时间生效时在类似查询中发出使用 UTC 偏移量,则必须相应调整 UTC 偏移量(对于丹佛时间,调整为 ‑07
),否则 Vertica 会返回不同的(并且错误)结果:
=> SELECT TIMESTAMPTZ '2017-01-16 09:56:13' AT TIME ZONE 'America/Denver' "Denver Time";
Denver Time
---------------------
2017-0-16 07:56:13
(1 row)
=> SELECT TIMESTAMPTZ '2017-01-16 09:56:13' AT TIME ZONE INTERVAL '-06:00' "Denver Time";
Denver Time
---------------------
2017-01-16 08:56:13
(1 row)
您可以分别使用
SHOW TIMEZONE
和
SET TIME ZONE
显示和设置会话的时区:
=> SHOW TIMEZONE;
name | setting
----------+------------------
timezone | America/New_York
(1 row)
=> SELECT CURRENT_TIMESTAMP(0) "Eastern Daylight Time";
Eastern Daylight Time
------------------------
2017-03-20 12:18:24-04
(1 row)
=> SET TIMEZONE 'America/Los_Angeles';
SET
=> SELECT CURRENT_TIMESTAMP(0) "Pacific Daylight Time";
Pacific Daylight Time
------------------------
2017-03-20 09:18:24-07
(1 row)
要查看默认的有效字面量列表,请参阅以下目录中的文件:
opt/vertica/share/timezonesets
例如:
$ cat Antarctica.txt
...
# src/timezone/tznames/Antarctica.txt
#
AWST 28800 # Australian Western Standard Time
# (Antarctica/Casey)
# (Australia/Perth)
...
NZST 43200 # New Zealand Standard Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
ROTT -10800 # Rothera Time
# (Antarctica/Rothera)
SYOT 10800 # Syowa Time
# (Antarctica/Syowa)
VOST 21600 # Vostok time
# (Antarctica/Vostok)