W bazie danych Oracle FROM_TZ()
funkcja konwertuje wartość znacznika czasu i strefę czasową na TIMESTAMP WITH TIME ZONE
wartość.
Wartość sygnatury czasowej i strefę czasową przekazujesz jako dwa oddzielne argumenty, a funkcja zwraca je jako TIMESTAMP WITH TIME ZONE
wartość.
Składnia
Składnia wygląda tak:
FROM_TZ(timestamp_value, time_zone_value)
Gdzie timestamp_value
to znacznik czasu, a time_zone_value
to ciąg znaków w formacie 'TZH:TZM'
lub wyrażenie znakowe, które zwraca ciąg w TZR
z opcjonalnym TZD
format.
Przykład
Oto przykład:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Wynik:
01/JAN/30 12:30:35.000000000 PM -04:00
Określanie regionu strefy czasowej
Oto przykład, który używa regionu strefy czasowej zamiast przesunięcia strefy czasowej:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Wynik:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Zmień strefę czasową
Możesz użyć AT LOCAL
lub AT TIME ZONE
klauzula, aby zmienić wynikowy znacznik czasu na inną strefę czasową.
Przykład:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Wynik:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
A tutaj używa AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Wynik:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Możesz użyć SESSIONTIMEZONE
funkcja sprawdzająca strefę czasową bieżącej sesji i DBTIMEZONE
aby sprawdzić strefę czasową bazy danych.
Nieprawidłowe strefy czasowe
Przekazanie nieprawidłowej strefy czasowej skutkuje błędem:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Wynik:
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
Listę prawidłowych regionów stref czasowych można uzyskać, wysyłając zapytanie do V$TIMEZONE_NAMES
widok.
Oto, co się dzieje, gdy podamy przesunięcie strefy czasowej poza akceptowanym zakresem:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Wynik:
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
Argumenty zerowe
Przekazywanie null
dla pierwszego argumentu powoduje błąd:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Wynik:
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:
Przekazywanie null
dla drugiego argumentu zwraca null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Wynik:
null
Zauważ, że domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. W powyższym przykładzie określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Przekazanie nieprawidłowej liczby argumentów skutkuje błędem:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Wynik:
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: