类别:

日期和时间函数

CONVERT_TIMEZONE

将时间戳转换为另一个时区。

语法

CONVERT_TIMEZONE( <source_tz> , <target_tz> , <source_timestamp_ntz> )

CONVERT_TIMEZONE( <target_tz> , <source_timestamp> )
Copy

实参

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_tztarget_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_AngelesEurope/LondonUTCEtc/GMT 等)。

    备注

    • 时区名称区分大小写,必须 放在单引号内(例如 'UTC')。

    • Snowflake 不支持 大多数时区 缩写 (link removed) (例如,PDTEST 等),因为给定的缩写可能指几个不同的时区之一。例如,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 |
+-------------------------+
Copy
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 |
+-------------------------------+
Copy
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 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
Copy
语言: 中文