カテゴリ:

日付と時刻の関数

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を含む任意のタイムスタンプバリアントです)。

戻り値

型 TIMESTAMP_NTZ、 TIMESTAMP_TZ、または NULL の値を返します。

  • 3引数バージョンでは、 TIMESTAMP_NTZ 型の値を返します。

  • 2引数バージョンでは、 TIMESTAMP_TZ 型の値を返します。

  • いずれかの引数が NULL の場合、 NULL を返します。

使用上の注意

  • 出力のタイムスタンプの表示形式は、現在のセッションの タイムスタンプ出力形式 と返されるタイムスタンプ値のデータ型によって決定されます。

  • 3引数バージョンの場合、結果の「wallclock」時間(現実世界の経過時間)は、入力タイムゾーンの入力「wallclock」と同じ時間を表しますが、ターゲット先のタイムゾーンにあります。

  • 2引数バージョンの場合、 source_timestamp 引数には通常タイムゾーンが含まれます。値が TIMESTAMP_TZ型の場合、タイムゾーンはその値から取得されます。それ以外の場合は、現在のセッションのタイムゾーンが使用されます。

  • source_tztarget_tz の場合は、 IANA タイムゾーンデータベース のリリース 2021a から タイムゾーン名 または リンク名 を指定できます(例: America/Los_AngelesEurope/LondonUTCEtc/GMT など)。

    注釈

    • タイムゾーン名は大文字と小文字が区別され、一重引用符で囲む 必要があります (例: 'UTC')。

    • Snowflakeは、タイムゾーンの 略語 の大半を サポートしていません (例: PDTEST)。特定の略語は、いくつかの異なるタイムゾーンの1つを参照している可能性があるためです。たとえば、 CST は、北米の中部標準時(UTC-6)、キューバ標準時(UTC-5)、および中国標準時(UTC+8)を指す場合があります。

例で返されるタイムスタンプにデフォルトの タイムスタンプ出力フォーマット を使用するには、現在のセッションで TIMESTAMP_OUTPUT_FORMAT パラメーターの設定を解除します。

ALTER SESSION UNSET TIMESTAMP_OUTPUT_FORMAT;
Copy

ソースタイムゾーンを指定する例

以下の例では、 CONVERT_TIMEZONE 関数の3引数バージョンを使用し、 source_tz 値を指定しています。これらの例は TIMESTAMP_NTZ 値を返します。

ロサンゼルスの「wallclock」時間をニューヨークの「wallclock」時間に変換します。

SELECT CONVERT_TIMEZONE(
  'America/Los_Angeles',
  'America/New_York',
  '2024-01-01 14:00:00'::TIMESTAMP_NTZ
) AS conv;
Copy
+-------------------------+
| CONV                    |
|-------------------------|
| 2024-01-01 17:00:00.000 |
+-------------------------+

ワルシャワの「wallclock」時間を UTC で一致する「wallclock」時間に変換します。

SELECT CONVERT_TIMEZONE(
  'Europe/Warsaw',
  'UTC',
  '2024-01-01 00:00:00'::TIMESTAMP_NTZ
) AS conv;
Copy
+-------------------------+
| CONV                    |
|-------------------------|
| 2023-12-31 23:00:00.000 |
+-------------------------+

送信元のタイムゾーンを指定しない例

以下の例では、 CONVERT_TIMEZONE 関数の2引数バージョンを使用しています。これらの例は TIMESTAMP_TZ 値を返します。したがって、返される値には、タイムスタンプのタイムゾーンと協定世界時(UTC)との差を示すオフセットが含まれます。例えば、 America/Los_Angeles タイムゾーンは、 -0700 のオフセットがあり、 UTC から7時間遅れていることを示します。

TIMESTAMP_TZ 値を指定する文字列を異なるタイムゾーンに変換します。

SELECT CONVERT_TIMEZONE(
  'America/Los_Angeles',
  '2024-04-05 12:00:00 +02:00'
) AS time_in_la;
Copy
+-------------------------------+
| TIME_IN_LA                    |
|-------------------------------|
| 2024-04-05 03:00:00.000 -0700 |
+-------------------------------+

異なるタイムゾーンにおける現在の「wallclock」時間を表示します。

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;
Copy
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| NOW_IN_LA                     | NOW_IN_NYC                    | NOW_IN_PARIS                  | NOW_IN_TOKYO                  |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2024-06-12 08:52:53.114 -0700 | 2024-06-12 11:52:53.114 -0400 | 2024-06-12 17:52:53.114 +0200 | 2024-06-13 00:52:53.114 +0900 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+