В 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