- カテゴリ:
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引数バージョンの場合:
結果の「wallclock」時間は、入力タイムゾーンの入力「wallclock」と同じ時間を表しますが、変換先のタイムゾーンにあります。
戻り値は常に TIMESTAMP_NTZ型です。
2引数バージョンの場合:
source_timestamp
引数はタイムゾーンを含むと見なされます。値が TIMESTAMP_TZ型の場合、タイムゾーンはその値から取得されます。それ以外の場合は、現在のセッションのタイムゾーンが使用されます。戻り値は常に TIMESTAMP_TZ型です。
source_tz
とtarget_tz
の場合は、 IANA タイムゾーンデータベース のリリース 2021a から タイムゾーン名 または リンク名 を指定できます(例:America/Los_Angeles
、Europe/London
、UTC
、Etc/GMT
など)。注釈
タイムゾーン名は大文字と小文字が区別され、一重引用符で囲む 必要があります (例:
'UTC'
)。Snowflakeは、タイムゾーンの 略語 の大半を サポートしていません (例:
PDT
、EST
)。特定の略語は、いくつかの異なるタイムゾーンの1つを参照している可能性があるためです。たとえば、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 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+