sql >> Databáze >  >> RDS >> Oracle

Funkce FROM_TZ() v Oracle

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:

  1. Jak provést LEVÝ SEMI JOIN v SQL Server

  2. Použití JShell v Javě 9 v NetBeans 9.0, část 3

  3. Úroveň izolace zavázaná ke čtení

  4. Nerozumím Collation? (Mysql, RDBMS, znakové sady)