In Oracle Database, de FROM_TZ()
functie converteert een tijdstempelwaarde en een tijdzone naar een TIMESTAMP WITH TIME ZONE
waarde.
Je geeft de tijdstempelwaarde en de tijdzone door als twee afzonderlijke argumenten, en de functie retourneert ze als een TIMESTAMP WITH TIME ZONE
waarde.
Syntaxis
De syntaxis gaat als volgt:
FROM_TZ(timestamp_value, time_zone_value)
Waar timestamp_value
is de tijdstempel, en time_zone_value
is een tekenreeks in het formaat 'TZH:TZM'
of een tekenuitdrukking die een tekenreeks retourneert in TZR
met optionele TZD
formaat.
Voorbeeld
Hier is een voorbeeld:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Resultaat:
01/JAN/30 12:30:35.000000000 PM -04:00
De tijdzoneregio specificeren
Hier is een voorbeeld dat de tijdzoneregio gebruikt in plaats van de tijdzoneverschuiving:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Resultaat:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Wijzig de tijdzone
U kunt AT LOCAL
. gebruiken of AT TIME ZONE
clausule om de resulterende tijdstempel te wijzigen in een andere tijdzone.
Voorbeeld:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Resultaat:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
En hier gebruikt het AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Resultaat:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
U kunt de SESSIONTIMEZONE
. gebruiken functie om de tijdzone van de huidige sessie te controleren, en DBTIMEZONE
om de tijdzone van de database te controleren.
Ongeldige tijdzones
Het passeren van een ongeldige tijdzone resulteert in een fout:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Resultaat:
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
U kunt een lijst met geldige tijdzoneregio's krijgen door de V$TIMEZONE_NAMES
op te vragen bekijken.
Dit is wat er gebeurt als we een tijdzone-offset opgeven die buiten het geaccepteerde bereik ligt:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Resultaat:
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
Nullargumenten
Doorgeven van null
voor het eerste argument resulteert in een fout:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Resultaat:
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:
Doorgeven van null
voor het tweede argument retourneert null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Resultaat:
null
Merk op dat SQLcl en SQL*Plus standaard een spatie retourneren wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. In het bovenstaande voorbeeld heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ongeldig aantal argumenten
Het doorgeven van een ongeldig aantal argumenten resulteert in een fout:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Resultaat:
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: