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: