- Kategorien:
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> )
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
undtarget_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 sichCST
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;
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;
+-------------------------+
| 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;
+-------------------------+
| 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;
+-------------------------------+
| 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;
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| 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 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+