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

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

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

  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

  2. как да проверите дали базата данни е последователна след непълно възстановяване

  3. Най-лесният метод за тестване на Oracle Stored Procedure

  4. низовият литерал е твърде дълъг - как да присвоите дълги xml данни към типа данни clob в oracle 11g r2

  5. Защо реда на сортиране varchar на Oracle не съвпада с поведението на сравнението на varchar?