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: