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: