В 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 и 999999999hours
е цяло число между 0 и 23minutes
иseconds
са цели числа между 0 и 59frac_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