Amazon Redshift unterstützt ab Patch 198 nicht mehr die Erstellung neuer Python-UDFs. Bestehende Python-UDFs werden bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im Blog-Posting
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Funktion CONVERT_TIMEZONE
CONVERT_TIMEZONE konvertiert einen Zeitstempel von einer Zeitzone zu einer anderen. Die Funktion passt sich automatisch an die Sommerzeit an.
Syntax
CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
Argumente
- source_timezone
-
(Optional) Die Zeitzone des aktuellen Zeitstempels. Der Standardwert ist UTC. Weitere Informationen finden Sie unter Nutzungshinweise zu Zeitstempeln.
- target_timezone
-
Die Zeitzone für den neuen Zeitstempel. Weitere Informationen finden Sie unter Nutzungshinweise zu Zeitstempeln.
- timestamp
-
Eine Zeitstempelspalte bzw. ein entsprechender Ausdruck, die/der implizit zu einem Zeitstempel konvertiert wird.
Rückgabetyp
TIMESTAMP
Nutzungshinweise zu Zeitstempeln
source_timezone oder target_timezone können als Zeitzonenname (wie '' oder 'SingapurAfrica/Kampala') oder als Zeitzonenabkürzung (wie 'UTC' oder 'PDT') angegeben werden. Sie müssen Zeitzonennamen nicht in Namen oder Abkürzungen in Abkürzungen konvertieren. Sie können beispielsweise einen Zeitstempel aus dem Quellzeitzonennamen „Singapur“ auswählen und ihn in einen Zeitstempel in der Zeitzonenabkürzung „PDT“ konvertieren.
Anmerkung
Die Ergebnisse bei der Verwendung eines Zeitzonennamens oder einer Zeitzonenabkürzung können aufgrund lokaler saisonaler Zeit, wie z. B. Sommerzeit, unterschiedlich sein.
Verwendung eines Zeitzonennamens
Eine aktuelle und vollständige Liste der Zeitzonennamen erhalten Sie, wenn Sie den folgenden Befehl ausführen.
select pg_timezone_names();
Jede Zeile enthält eine durch Kommata getrennte Zeichenfolge mit dem Namen der Zeitzone, der Abkürzung, dem UTC-Offset und der Angabe, ob in der Zeitzone die Sommerzeit gilt (t oder f). Das folgende Snippet zeigt beispielsweise zwei Ergebniszeilen. Die erste Zeile enthält die Zeitzone Antarctica/South Pole, die Abkürzung NZDT mit einem UTC-Offset von 13:00:00 sowie die Angabe f, um anzuzeigen, dass die Sommerzeit nicht gilt. Die zweite Zeile enthält die Zeitzone Europe/Paris, die Abkürzung CET mit einem UTC-Offset von 01:00:00 sowie die Angabe f, um anzuzeigen, dass die Sommerzeit gilt.
pg_timezone_names
------------------
(Antarctica/South_Pole,NZDT,13:00:00,t)
(Europe/Paris,CET,01:00:00,f)
Führen Sie die SQL-Anweisung aus, um die gesamte Liste abzurufen und einen Zeitzonennamen zu finden. Es werden ungefähr 600 Zeilen zurückgegeben. Auch wenn es sich bei einigen der zurückgegebenen Zeitzonennamen um Akronyme handelt (etwa GB, PRC, ROK), werden sie von der Funktion CONVERT_TIMEZONE als Zeitzonennamen und nicht als Zeitzonenabkürzungen behandelt.
Wenn Sie eine Zeitzone mit einem Zeitzonennamen angeben, nimmt CONVERT_TIMEZONE automatisch Anpassungen für die Sommerzeit oder andere lokale saisonale Protokolle wie beispielsweise Standardzeit oder Winterzeit vor, die für die betreffende Zeitzone während des von „timestamp“ angegebenen Datums bzw. der Uhrzeit gelten. Beispielsweise steht 'Europe/London' für UTC im Winter und fügt im Sommer eine Stunde hinzu. Beachten Sie, dass Amazon Redshift die IANA-Zeitzonendatenbank
Verwendung einer Zeitzonenabkürzung
Führen Sie für eine vollständige Liste der Zeitzonenabkürzungen den folgenden Befehl aus.
select pg_timezone_abbrevs();
Die Ergebnisse enthalten eine durch Kommata getrennte Zeichenfolge mit der Abkürzung der Zeitzone, dem UTC-Offset und der Angabe, ob in der Zeitzone die Sommerzeit gilt (t oder f). Das folgende Snippet zeigt beispielsweise zwei Ergebniszeilen. Die erste Zeile enthält die Abkürzung für Pacific Daylight Time PDT mit einem UTC-Offset von -07:00:00 sowie die Angabe t, um anzuzeigen, dass die Sommerzeit gilt. Die zweite Zeile enthält die Abkürzung für Pacific Daylight Time PST mit einem UTC-Offset von -08:00:00 sowie die Angabe f, um anzuzeigen, dass die Sommerzeit nicht gilt.
pg_timezone_abbrevs
--------------------
(PDT,-07:00:00,t)
(PST,-08:00:00,f)
Führen Sie die SQL-Anweisung aus, um die gesamte Liste abzurufen und anhand des Offsets und der Angabe zur Sommerzeit nach einer Abkürzung zu suchen. Es werden ungefähr 200 Zeilen zurückgegeben.
Zeitzonenabkürzungen stehen für eine feste Verschiebung von der UTC. Wenn Sie eine Zeitzone mit einer Zeitzonenabkürzung angeben, verwendet CONVERT_TIMEZONE die feste Verschiebung von UTC und nimmt keine Anpassungen an saisonale lokale Protokolle vor.
Das POSIX-style Format wird verwendet
Eine POSIX-style Zeitzonenspezifikation hat die Form StdOffset oder StdOffsetDST, wobei STD eine Abkürzung für eine Zeitzone, Offset der numerische Offset in Stunden westlich von UTC und DST eine optionale Abkürzung für Sommerzeit ist. Für die Sommerzeit wird angenommen, dass sie eine Stunde vor der angegebenen Verschiebung liegt.
POSIX-style Zeitzonenformate verwenden positive Offsets westlich von Greenwich, im Gegensatz zu der ISO-8601 Konvention, die positive Offsets östlich von Greenwich verwendet.
Im Folgenden finden Sie Beispiele für Zeitzonen: POSIX-style
-
PST8
-
PST8PDT
-
EST5
-
EST5EDT
Anmerkung
Amazon Redshift validiert keine POSIX-style Zeitzonenspezifikationen, daher ist es möglich, die Zeitzone auf einen ungültigen Wert festzulegen. Beispielsweise führt der folgende Befehl nicht zu einem Fehler, obwohl dadurch die Zeitzone auf einen ungültigen Wert gesetzt wird.
set timezone to ‘xxx36’;
Beispiele
Viele der Beispiele verwenden den TICKIT-Beispieldatensatz. Weitere Informationen finden Sie unter Beispieldatenbank.
Das folgende Beispiel konvertiert den Zeitstempelwert von der Standardzeitzone UTC zu PST.
select convert_timezone('PST', '2008-08-21 07:23:54');convert_timezone ------------------------ 2008-08-20 23:23:54
Das folgende Beispiel konvertiert den Zeitstempelwert in der Spalte LISTTIME von der Standardzeitzone UTC zu PST. Obwohl der Zeitstempel in der Sommerzeitzone liegt, wird er zur Standardzeit konvertiert, da die Zielzeitzone als Abkürzung (PST) angegeben ist.
select listtime, convert_timezone('PST', listtime) from listing where listid = 16;listtime | convert_timezone --------------------+------------------- 2008-08-24 09:36:12 2008-08-24 01:36:12
Das folgende Beispiel konvertiert eine LISTTIME-Spalte mit einem Zeitstempel von der Standard-UTC-Zeitzone in die US/Pacific Zeitzone. Die Zielzeitzone verwendet einen Zeitzonennamen, und der Zeitstempel liegt im Sommerzeitzeitraum, weshalb die Funktion die Sommerzeit ausgibt.
select listtime, convert_timezone('US/Pacific', listtime) from listing where listid = 16;listtime | convert_timezone --------------------+--------------------- 2008-08-24 09:36:12 | 2008-08-24 02:36:12
Das folgende Beispiel konvertiert eine Zeitstempelzeichenfolge von EST zu PST:
select convert_timezone('EST', 'PST', '20080305 12:25:29');convert_timezone ------------------- 2008-03-05 09:25:29
Im folgenden Beispiel wird ein Zeitstempel in US Eastern Standard Time konvertiert, da die Zielzeitzone einen Zeitzonennamen (America/New_York) verwendet und der Zeitstempel innerhalb des Standardzeitraums liegt.
select convert_timezone('America/New_York', '2013-02-01 08:00:00');convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)
Im folgenden Beispiel wird der Zeitstempel in US Eastern Daylight Time konvertiert, da die Zielzeitzone einen Zeitzonennamen (America/New_York) verwendet und der Zeitstempel innerhalb der Sommerzeit liegt.
select convert_timezone('America/New_York', '2013-06-01 08:00:00');convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)
Das folgende Beispiel illustriert die Verwendung von Verschiebungen.
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2, CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2;newzone_plus_2 | newzone_minus_2_15 | la_plus_2 | gmt_plus_2 ---------------------+---------------------+---------------------+--------------------- 2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00 (1 row)