Oracle
 sql >> Datenbank >  >> RDS >> Oracle

FROM_TZ()-Funktion in Oracle

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: