sql >> Databasteknik >  >> RDS >> Oracle

FROM_TZ() Funktion i Oracle

I Oracle Database, FROM_TZ() funktionen konverterar ett tidsstämpelvärde och en tidszon till en TIMESTAMP WITH TIME ZONE värde.

Du skickar tidsstämpelvärdet och tidszonen som två separata argument, och funktionen returnerar dem som en TIMESTAMP WITH TIME ZONE värde.

Syntax

Syntaxen ser ut så här:

FROM_TZ(timestamp_value, time_zone_value)

Där timestamp_value är tidsstämpeln och time_zone_value är en teckensträng i formatet 'TZH:TZM' eller ett teckenuttryck som returnerar en sträng i TZR med valfri TZD format.

Exempel

Här är ett exempel:

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

Ange tidszonsregion

Här är ett exempel som använder tidszonsregionen istället för tidszonsförskjutningen:

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

Ändra tidszon

Du kan använda AT LOCAL eller AT TIME ZONE för att ändra den resulterande tidsstämpeln till en annan tidszon.

Exempel:

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

Och här använder 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 använda SESSIONTIMEZONE funktion för att kontrollera tidszonen för den aktuella sessionen och DBTIMEZONE för att kontrollera databasens tidszon.

Ogiltiga tidszoner

Att passera en ogiltig tidszon resulterar i ett fel:

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 lista över giltiga tidszonsregioner genom att fråga V$TIMEZONE_NAMES visa.

Det här är vad som händer när vi tillhandahåller en tidszonförskjutning som ligger utanför det accepterade intervallet:

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

Nollargument

Skickar null för det första argumentet resulterar i ett fel:

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:

Skickar null för det andra argumentet returnerar null :

SET NULL 'null';
SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;

Resultat:

null

Observera att som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. I exemplet ovan specificerade jag att strängen null bör returneras.

Ogiltigt antal argument

Att skicka ett ogiltigt antal argument resulterar i ett fel:

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. Hur man får ForeignCollection Field till markören i Ormlite

  2. Kan inte komma åt förbefolkad SQLite-databas med PhoneGap/Cordova i Android

  3. 5 enkla steg för att komma igång med MariaDB och Tableau

  4. Doctrine Query Language få max/senaste raden per grupp