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: