In der Oracle-Datenbank die FROM_TZ()
Funktion konvertiert einen Zeitstempelwert und eine Zeitzone in einen TIMESTAMP WITH TIME ZONE
Wert.
Sie übergeben den Zeitstempelwert und die Zeitzone als zwei separate Argumente, und die Funktion gibt sie als TIMESTAMP WITH TIME ZONE
zurück Wert.
Syntax
Die Syntax lautet wie folgt:
FROM_TZ(timestamp_value, time_zone_value)
Wobei timestamp_value
ist der Zeitstempel und time_zone_value
ist eine Zeichenfolge im Format 'TZH:TZM'
oder ein Zeichenausdruck, der eine Zeichenfolge in TZR
zurückgibt mit optionalem TZD
formatieren.
Beispiel
Hier ist ein Beispiel:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Ergebnis:
01/JAN/30 12:30:35.000000000 PM -04:00
Festlegen der Zeitzonenregion
Hier ist ein Beispiel, das die Zeitzonenregion anstelle des Zeitzonenoffsets verwendet:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Ergebnis:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Zeitzone ändern
Sie können AT LOCAL
verwenden oder AT TIME ZONE
-Klausel, um den resultierenden Zeitstempel in eine andere Zeitzone zu ändern.
Beispiel:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Ergebnis:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
Und hier wird AT LOCAL
verwendet :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Ergebnis:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Sie können die SESSIONTIMEZONE
verwenden Funktion zum Überprüfen der Zeitzone der aktuellen Sitzung und DBTIMEZONE
um die Zeitzone der Datenbank zu überprüfen.
Ungültige Zeitzonen
Das Übergeben einer ungültigen Zeitzone führt zu einem Fehler:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover') FROM DUAL Error report - ORA-01882: timezone region not found
Sie können eine Liste gültiger Zeitzonenregionen erhalten, indem Sie V$TIMEZONE_NAMES
abfragen ansehen.
Folgendes passiert, wenn wir eine Zeitzonenverschiebung angeben, die außerhalb des zulässigen Bereichs liegt:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00') FROM DUAL Error report - ORA-01874: time zone hour must be between -15 and 15
Null-Argumente
Übergabe von null
für das erste Argument ergibt einen Fehler:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT FROM_TZ(null, '+10:00') FROM DUAL Error at Command Line : 2 Column : 13 Error report - SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR 00932. 00000 - "inconsistent datatypes: expected %s got %s" *Cause: *Action:
Übergabe von null
für das zweite Argument wird null
zurückgegeben :
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Ergebnis:
null
Beachten Sie, dass SQLcl und SQL*Plus standardmäßig immer dann ein Leerzeichen zurückgeben, wenn null
tritt als Ergebnis eines SQL SELECT
auf Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Im obigen Beispiel habe ich angegeben, dass die Zeichenfolge null
zurückgegeben werden soll.
Ungültige Anzahl von Argumenten
Das Übergeben einer ungültigen Anzahl von Argumenten führt zu einem Fehler:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: