Kategorien:

Datums- und Uhrzeitfunktionen

CONVERT_TIMEZONE

Konvertiert einen Zeitstempel in eine andere Zeitzone:

Syntax

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

CONVERT_TIMEZONE( <target_tz> , <source_timestamp> )
Copy

Argumente

source_tz

Zeichenfolge zur Angabe der Zeitzone für den Eingabezeitstempel. Ist für Zeitstempel ohne Zeitzone erforderlich (d. h. TIMESTAMP_NTZ).

target_tz

Zeichenfolge, die die Zeitzone angibt, in die der Eingabezeitstempel umgerechnet wird.

source_timestamp_ntz

Zeichenfolge, die für die Version mit drei Argumenten den zu konvertierenden Zeitstempel angibt (muss TIMESTAMP_NTZ sein).

source_timestamp

Zeichenfolge, die für die Version mit zwei Argumenten den zu konvertierenden Zeitstempel angibt (kann eine beliebige Zeitstempelvariante sein, einschließlich TIMESTAMP_NTZ).

Rückgabewerte

Gibt einen Wert vom Typ TIMESTAMP_NTZ, TIMESTAMP_TZ oder NULL zurück:

  • Für die Version mit 3 Argumenten wird ein Wert vom Typ TIMESTAMP_NTZ zurückgegeben.

  • Für die Version mit 2 Argumenten wird ein Wert vom Typ TIMESTAMP_TZ zurückgegeben.

  • Wenn eines der Argumente NULL ist, wird NULL zurückgegeben.

Nutzungshinweise

  • Das Anzeigeformat für Zeitstempel in der Ausgabe wird durch das Zeitstempel-Ausgabeformat für die aktuelle Sitzung und den Datentyp des zurückgegebenen Zeitstempelwertes bestimmt.

  • Bei der Version mit 3 Argumenten stellt die „Wanduhr“-Zeit im Ergebnis den gleichen Zeitpunkt dar wie die Eingabe-„Wanduhr“ in der Eingabezeitzone, allerdings in der Zielzeitzone.

  • Bei der Version mit 2 Argumenten enthält das Argument source_timestamp normalerweise die Zeitzone. Wenn der Wert vom Typ TIMESTAMP_TZ ist, wird die Zeitzone aus seinem Wert übernommen. Andernfalls wird die Zeitzone der aktuellen Sitzung verwendet.

  • Für source_tz und target_tz können Sie einen Zeitzonennamen oder einen Link-Namen aus dem Release 2021a der IANA Zeitzonendatenbank (z. B. America/Los_Angeles, Europe/London, UTC, Etc/GMT usw.) angeben.

    Bemerkung

    • Bei Zeitzonennamen wird zwischen Groß-/Kleinschreibung unterschieden. Außerdem müssen sie in einfache Anführungszeichen gesetzt werden (z. B. 'UTC').

    • Snowflake bietet keine Unterstützung für die meisten Zeitzonen abkürzungen (z. B. PDT, EST usw.), da sich eine bestimmte Abkürzung auf mehrere verschiedenen Zeitzonen beziehen kann. So kann sich CST beispielsweise auf die „Central Standard Time“ in Nordamerika (UTC-6), die „Cuba Standard Time“ (UTC-5) und die „China Standard Time“ (UTC+8) beziehen.

Beispiele

Um das Standardformat für die Ausgabe von Zeitstempeln für die in den Beispielen zurückgegebenen Zeitstempel zu verwenden, deaktivieren Sie den Parameter TIMESTAMP_OUTPUT_FORMAT in der aktuellen Sitzung:

ALTER SESSION UNSET TIMESTAMP_OUTPUT_FORMAT;
Copy

Beispiele, die eine Quellzeitzone angeben

Die folgenden Beispiele verwenden die Version mit 3 Argumenten der Funktion CONVERT_TIMEZONE und geben einen source_tz Wert an. Diese Beispiele geben TIMESTAMP_NTZ-Werte zurück.

Wandeln Sie eine „Wanduhr“-Zeit in Los Angeles in die entsprechende „Wanduhr“-Zeit in New York um:

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 |
+-------------------------+

Wandeln Sie eine Uhrzeit in Warschau in die entsprechende „Wanduhr“-Zeit in UTC um:

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 |
+-------------------------+

Beispiele, in denen keine Quellzeitzone angegeben wir

Die folgenden Beispiele verwenden die Version mit zwei Argumenten der Funktion CONVERT_TIMEZONE. Diese Beispiele geben TIMESTAMP_TZ-Werte zurück. Daher enthalten die zurückgegebenen Werte einen Offset, der die Differenz zwischen der Zeitzone des Zeitstempels und der „Coordinated Universal Time“ (UTC) angibt. Zum Beispiel hat die Zeitzone America/Los_Angeles ein Offset von -0700, um anzuzeigen, dass sie sieben Stunden hinter UTC liegt.

Konvertiert eine Zeichenfolge, die einen TIMESTAMP_TZ-Wert angibt, in eine andere Zeitzone:

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 |
+-------------------------------+

Zeigt die aktuelle „Wanduhr“-Zeit in verschiedenen Zeitzonen an:

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 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+