In Oracle Database, il FROM_TZ() la funzione converte un valore di timestamp e un fuso orario in un TIMESTAMP WITH TIME ZONE valore.
Passi il valore del timestamp e il fuso orario come due argomenti separati e la funzione li restituisce come TIMESTAMP WITH TIME ZONE valore.
Sintassi
La sintassi è questa:
FROM_TZ(timestamp_value, time_zone_value)
Dove timestamp_value è il timestamp e time_zone_value è una stringa di caratteri nel formato 'TZH:TZM' o un'espressione di caratteri che restituisce una stringa in TZR con TZD opzionale formato.
Esempio
Ecco un esempio:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL; Risultato:
01/JAN/30 12:30:35.000000000 PM -04:00
Specifica della regione del fuso orario
Ecco un esempio che utilizza la regione del fuso orario invece dell'offset del fuso orario:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL; Risultato:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Cambiare il fuso orario
Puoi usare AT LOCAL o AT TIME ZONE clausola per modificare il timestamp risultante in un fuso orario diverso.
Esempio:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL; Risultato:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
E qui sta usando AT LOCAL :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL; Risultato:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Puoi utilizzare il SESSIONTIMEZONE funzione per controllare il fuso orario della sessione corrente e DBTIMEZONE per controllare il fuso orario del database.
Fuso orario non valido
Il superamento di un fuso orario non valido genera un errore:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL; Risultato:
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
Puoi ottenere un elenco di regioni con fuso orario valide interrogando il V$TIMEZONE_NAMES visualizza.
Ecco cosa succede quando forniamo un fuso orario che non rientra nell'intervallo accettato:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL; Risultato:
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 Argomenti nulli
Passaggio null per il primo argomento risulta un errore:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL; Risultato:
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:
Passaggio null per il secondo argomento restituisce null :
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL; Risultato:
null
Nota che per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.
Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Nell'esempio sopra, ho specificato che la stringa null deve essere restituito.
Numero di argomenti non valido
Il passaggio di un numero di argomenti non valido genera un errore:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL; Risultato:
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: