В 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: