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: