sql >> Database >  >> RDS >> Oracle

FROM_TZ() Functie in Oracle

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:

  1. Waarden selecteren uit Oracle Table Variable / Array?

  2. Suggesties voor het implementeren van audittabellen in SQL Server?

  3. Wat is het verschil tussen VARCHAR en NVARCHAR in SQL-server - SQL Server / T-SQL-zelfstudie, deel 32

  4. xampp MySQL start niet op