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: