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

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

В Oracle Database, TO_DSINTERVAL() функцията преобразува своя аргумент в стойност от INTERVAL DAY TO SECOND тип данни.

Синтаксис

Синтаксисът е така:

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

Така че имате възможност да предадете аргумента във формат SQL или ISO формат.

Ето разликата:

  • sql_format е форматът на интервала на SQL, съвместим със стандарта SQL (ISO/IEC 9075).
  • ds_iso_format е ISO форматът за продължителност, съвместим със стандарта ISO 8601:2004.

Синтаксисът за sql_format става така:

[+ | -] days hours : minutes : seconds [. frac_secs ]

Къде:

  • days е цяло число между 0 и 999999999
  • hours е цяло число между 0 и 23
  • minutes и seconds са цели числа между 0 и 59
  • frac_secs е дробната част от секундите между .0 и .999999999.
  • Едно или повече празни места отделят дните от часовете. Допълнителни празни места са разрешени между форматните елементи.

И синтаксисът за ds_iso_format :

[-] P [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Къде:

  • days , hours , minutes и seconds са цели числа между 0 и 999999999.
  • frac_secs е дробната част от секундите между .0 и .999999999.
  • Не се допускат празни места в стойността.
  • Ако посочите T , тогава трябва да посочите поне един от hours , minutes , или seconds стойности.

Примери

Ето няколко примера за демонстрация.

SQL формат

Тук предавам аргумента в SQL формат:

SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

Резултат:

+135 08:35:47.123456789

Можем да го добавим със знака му, ако е необходимо. Нека го обърнем на отрицателно:

SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

Резултат:

-135 08:35:47.123456789

ISO формат

В този пример предавам същата стойност, но в ISO формат:

SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

Резултат:

+135 08:35:47.123456789

Ето го с отрицателна стойност:

SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

Резултат:

-135 08:35:47.123456789

Предоставете стойност по подразбиране при грешка при преобразуване

Също така имате възможност да предоставите стойност, която да се върне в случай, че има грешка при преобразуването на аргумента в INTERVAL DAY TO SECOND тип.

Пример:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL;

Резултат:

+00 00:00:00.000000

Нулеви аргументи

Предаването на null води до null :

SET NULL 'null';
SELECT 
    TO_DSINTERVAL(null)
FROM DUAL;

Резултат:

null

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Невалиден брой аргументи

Извикването на функцията без предаване на аргументи води до грешка:

SELECT TO_DSINTERVAL()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

И предаването на твърде много аргументи води до грешка:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL
Error report -
ORA-12702: invalid NLS parameter string used in SQL function

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RDLC LocalReport Експорт в Excel наистина бавен

  2. Как да пишете в CSV файл с помощта на Oracle SQL*Plus

  3. Oracle копира данни в друга таблица

  4. Как да изпълня съхранена процедура на оракул?

  5. Извличане на последно вмъкнатата IDENTITY на Oracle