В Oracle Database, FROM_TZ() функция преобразува стойност на времеви печат и часова зона в TIMESTAMP WITH TIME ZONE стойност.
Вие предавате стойността на времевата марка и часовата зона като два отделни аргумента и функцията ги връща като TIMESTAMP WITH TIME ZONE стойност.
Синтаксис
Синтаксисът е така:
FROM_TZ(timestamp_value, time_zone_value)
Където timestamp_value е клеймото за време и time_zone_value е символен низ във формат 'TZH:TZM' или символен израз, който връща низ в TZR с незадължителен TZD формат.
Пример
Ето един пример:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL; Резултат:
01/JAN/30 12:30:35.000000000 PM -04:00
Указване на региона на часовата зона
Ето пример, който използва региона на часовата зона вместо изместването на часовата зона:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL; Резултат:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Промяна на часовата зона
Можете да използвате AT LOCAL или AT TIME ZONE клауза, за да промените получената времева марка в друга часова зона.
Пример:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL; Резултат:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
И тук се използва AT LOCAL :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL; Резултат:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Можете да използвате SESSIONTIMEZONE функция за проверка на часовата зона на текущата сесия и DBTIMEZONE за да проверите часовата зона на базата данни.
Невалидни часови зони
Предаването на невалидна часова зона води до грешка:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL; Резултат:
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
Можете да получите списък с валидни региони на часовата зона, като направите заявка за V$TIMEZONE_NAMES изглед.
Ето какво се случва, когато предоставим изместване на часовата зона, което е извън приетия диапазон:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL; Резултат:
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 Нулеви аргументи
Предаването на null за първия аргумент води до грешка:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL; Резултат:
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:
Предаването на null за втория аргумент връща null :
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL; Резултат:
null
Имайте предвид, че по подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.
Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. В примера по-горе посочих, че низът null трябва да бъдат върнати.
Невалиден брой аргументи
Предаването на невалиден брой аргументи води до грешка:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL; Резултат:
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: