sql >> Database teknologi >  >> RDS >> Oracle

FROM_TZ() Funktion i Oracle

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:

  1. Brug af IN-sætningen med en kommasepareret streng fra outputtet af en replace() funktion i Oracle SQL

  2. Hvordan kan jeg returnere pivottabeloutput i MySQL?

  3. Sådan linker du en Access-database til SQL Server i Access 2016

  4. Hvordan konverterer man en streng til dato i MySQL?