V databázi Oracle je to FROM_TZ()
funkce převede hodnotu časového razítka a časové pásmo na TIMESTAMP WITH TIME ZONE
hodnotu.
Hodnotu časového razítka a časové pásmo předáte jako dva samostatné argumenty a funkce je vrátí jako TIMESTAMP WITH TIME ZONE
hodnotu.
Syntaxe
Syntaxe vypadá takto:
FROM_TZ(timestamp_value, time_zone_value)
Kde timestamp_value
je časové razítko a time_zone_value
je řetězec znaků ve formátu 'TZH:TZM'
nebo znakový výraz, který vrací řetězec v TZR
s volitelným TZD
formát.
Příklad
Zde je příklad:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Výsledek:
01/JAN/30 12:30:35.000000000 PM -04:00
Určení oblasti časového pásma
Zde je příklad, který používá oblast časového pásma místo posunu časového pásma:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Výsledek:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Změnit časové pásmo
Můžete použít AT LOCAL
nebo AT TIME ZONE
klauzule ke změně výsledného časového razítka na jiné časové pásmo.
Příklad:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Výsledek:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
A zde je to pomocí AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Výsledek:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Můžete použít SESSIONTIMEZONE
funkce pro kontrolu časového pásma aktuální relace a DBTIMEZONE
zkontrolovat časové pásmo databáze.
Neplatná časová pásma
Předání neplatné časové zóny má za následek chybu:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Výsledek:
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
Seznam platných oblastí časového pásma můžete získat dotazem na V$TIMEZONE_NAMES
zobrazit.
Když poskytneme posun časového pásma, který je mimo přijatelný rozsah, stane se toto:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Výsledek:
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
Nulové argumenty
Předávání null
pro první argument vede k chybě:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Výsledek:
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:
Předávání null
pro druhý argument vrací null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Výsledek:
null
Všimněte si, že standardně SQLcl a SQL*Plus vrátí prázdné místo vždy, když null
dochází v důsledku SQL SELECT
prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Ve výše uvedeném příkladu jsem uvedl, že řetězec null
by měl být vrácen.
Neplatný počet argumentů
Předání neplatného počtu argumentů má za následek chybu:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Výsledek:
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: