- 类别:
CONVERT_TIMEZONE¶
将时间戳转换为另一个时区。
语法¶
CONVERT_TIMEZONE( <source_tz> , <target_tz> , <source_timestamp_ntz> )
CONVERT_TIMEZONE( <target_tz> , <source_timestamp> )
实参¶
source_tz
该字符串指定输入时间戳的时区。对于没有时区的时间戳(即 TIMESTAMP_NTZ),必须使用此字符串。
target_tz
该字符串指定输入时间戳应转换为的时区。
source_timestamp_ntz
对于 3 实参版本,该字符串指定要转换的时间戳(必须是 TIMESTAMP_NTZ)。
source_timestamp
对于 2 实参版本,该字符串指定要转换的时间戳(可以是任何时间戳变体,包括 TIMESTAMP_NTZ)。
使用说明¶
对于 3 实参版本:
结果中的“挂钟”时间表示与输入时区中的输入“挂钟”相同的时间点,但位于目标时区。
返回值始终为类型 TIMESTAMP_NTZ。
对于 2 实参版本:
source_timestamp
实参被视为包括时区。如果值为类型 TIMESTAMP_TZ,则从其值中获取时区。否则,使用当前会话时区。返回值始终为类型 TIMESTAMP_TZ。
对于
source_tz
和target_tz
,在 IANA Time Zone Database (https://www.iana.org/time-zones) 的版本 2021a 中,您可以指定 时区名称 (https://data.iana.org/time-zones/tzdb-2021a/zone1970.tab) 或 链接名称 (https://data.iana.org/time-zones/tzdb-2021a/backward) (例如America/Los_Angeles
、Europe/London
、UTC
、Etc/GMT
等)。备注
时区名称区分大小写,必须 放在单引号内(例如
'UTC'
)。Snowflake 不支持 大多数时区 缩写 (link removed) (例如,
PDT
、EST
等),因为给定的缩写可能指几个不同的时区之一。例如,CST
可能指北美中部标准时间 (UTC-6)、古巴标准时间 (UTC-5) 和中国标准时间 (UTC+8)。
示例¶
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS';
-- Convert a "wallclock" time in Los Angeles to the matching "wallclock" time in New York
SELECT CONVERT_TIMEZONE('America/Los_Angeles', 'America/New_York', '2019-01-01 14:00:00'::timestamp_ntz) AS conv;
+-------------------------+
| CONV |
|-------------------------|
| 2019-01-01 17:00:00.000 |
+-------------------------+
-- Convert a "wallclock" time in Warsaw to the matching "wallclock" time in UTC
SELECT CONVERT_TIMEZONE('Europe/Warsaw', 'UTC', '2019-01-01 00:00:00'::timestamp_ntz) AS conv;
+-------------------------+
| CONV |
|-------------------------|
| 2018-12-31 23:00:00.000 |
+-------------------------+
ALTER SESSION UNSET timestamp_output_format;
-- Convert TIMESTAMP_TZ to a different time zone and include the time zone in the result
SELECT CONVERT_TIMEZONE('America/Los_Angeles', '2018-04-05 12:00:00 +02:00') AS time_in_la;
+-------------------------------+
| TIME_IN_LA |
|-------------------------------|
| 2018-04-05 03:00:00.000 -0700 |
+-------------------------------+
ALTER SESSION UNSET timestamp_output_format;
-- Show the current "wallclock" time in different time zones
SELECT
CURRENT_TIMESTAMP() AS now_in_la,
CONVERT_TIMEZONE('America/New_York', CURRENT_TIMESTAMP()) AS now_in_nyc,
CONVERT_TIMEZONE('Europe/Paris', CURRENT_TIMESTAMP()) AS now_in_paris,
CONVERT_TIMEZONE('Asia/Tokyo', CURRENT_TIMESTAMP()) AS now_in_tokyo;
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| NOW_IN_LA | NOW_IN_NYC | NOW_IN_PARIS | NOW_IN_TOKYO |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2019-01-11 14:23:08.497 -0800 | 2019-01-11 17:23:08.497 -0500 | 2019-01-11 23:23:08.497 +0100 | 2019-01-12 07:23:08.497 +0900 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+