В Oracle Database, TO_YMINTERVAL()
функцията преобразува своя аргумент в стойност от INTERVAL MONTH TO YEAR
тип данни.
Синтаксис
Синтаксисът е така:
TO_YMINTERVAL
( ' { [+|-] years - months
| ym_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, years
е цяло число между 0 и 999999999 и months
е цяло число между 0 и 11. Разрешени са допълнителни празни места между елементите на формат.
Във формат ISO (синтаксис по-долу) годините и месеците са цели числа между 0 и 999999999. Дни, hours
, minutes
, seconds
и frac_secs
са неотрицателни цели числа и се игнорират, ако са посочени. Не се допускат празни места в стойността. Ако посочите T
, тогава трябва да посочите поне един от hours
, minutes
, или seconds
стойности.
Синтаксисът за ds_iso_format
става така:
[-] P [ years Y ] [months M] [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Примери
Ето няколко примера за демонстрация.
SQL формат
Тук предавам аргумента в SQL формат:
SELECT TO_YMINTERVAL('1-2')
FROM DUAL;
Резултат:
+01-02
В този случай минах една година и два месеца в SQL формат.
Можем да го добавим със знака му, ако е необходимо. Нека го обърнем на отрицателно:
SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;
Резултат:
-01-02
ISO формат
В този пример предавам същата стойност, но в ISO формат:
SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;
Резултат:
+01-02
Ето го с отрицателна стойност:
SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;
Резултат:
-01-02
Предоставете стойност по подразбиране при грешка при преобразуване
Също така имате възможност да предоставите стойност, която да се върне в случай, че има грешка при преобразуването на аргумента в INTERVAL MONTH TO YEAR
тип.
Пример:
SELECT
TO_YMINTERVAL(
'1y-02m'
DEFAULT '00-00' ON CONVERSION ERROR
)
FROM DUAL;
Резултат:
+00-00
Нулеви аргументи
Предаването на null
води до null
:
SET NULL 'null';
SELECT
TO_YMINTERVAL(null)
FROM DUAL;
Резултат:
null
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Невалиден брой аргументи
Извикването на функцията без предаване на аргументи води до грешка:
SELECT TO_YMINTERVAL()
FROM DUAL;
Резултат:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function
И предаването на твърде много аргументи води до грешка:
SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;
Резултат:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"