Oracle
 sql >> база данни >  >> RDS >> Oracle

FROM_TZ() Функция в Oracle

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на виртуална машина с Oracle VM Virtual Box

  2. SQL Server еквивалент на функцията WM_CONCAT

  3. Разширете EM Grid Control до нови възли

  4. Бяла книга за статистиката на CBO

  5. Пакетно вмъкване/актуализация на MyBatis за Oracle