I Oracle Database er FROM_TZ()
funktion konverterer en tidsstempelværdi og en tidszone til et TIMESTAMP WITH TIME ZONE
værdi.
Du sender tidsstempelværdien og tidszonen som to separate argumenter, og funktionen returnerer dem som en TIMESTAMP WITH TIME ZONE
værdi.
Syntaks
Syntaksen ser sådan ud:
FROM_TZ(timestamp_value, time_zone_value)
Hvor timestamp_value
er tidsstemplet og time_zone_value
er en tegnstreng i formatet 'TZH:TZM'
eller et tegnudtryk, der returnerer en streng i TZR
med valgfri TZD
format.
Eksempel
Her er et eksempel:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Resultat:
01/JAN/30 12:30:35.000000000 PM -04:00
Specificering af tidszoneregionen
Her er et eksempel, der bruger tidszoneregionen i stedet for tidszoneforskydningen:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Resultat:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Skift tidszonen
Du kan bruge AT LOCAL
eller AT TIME ZONE
klausul for at ændre det resulterende tidsstempel til en anden tidszone.
Eksempel:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Resultat:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
Og her bruger den AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Resultat:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Du kan bruge SESSIONTIMEZONE
funktion til at kontrollere tidszonen for den aktuelle session og DBTIMEZONE
for at kontrollere databasens tidszone.
Ugyldige tidszoner
Passering af en ugyldig tidszone resulterer i en fejl:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Resultat:
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
Du kan få en liste over gyldige tidszoneområder ved at forespørge på V$TIMEZONE_NAMES
se.
Her er, hvad der sker, når vi giver en tidszoneforskydning, der er uden for det accepterede interval:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Resultat:
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
Nul-argumenter
Sender null
for det første argument resulterer i en fejl:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Resultat:
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:
Sender null
for det andet argument returnerer null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Resultat:
null
Bemærk, at SQLcl og SQL*Plus som standard returnerer et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. I eksemplet ovenfor specificerede jeg, at strengen null
skal returneres.
Ugyldigt antal argumenter
Sende et ugyldigt antal argumenter resulterer i en fejl:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Resultat:
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: