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

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

В Oracle Database, MONTHS_BETWEEN() функцията връща броя на месеците между две дати.

Синтаксис

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

MONTHS_BETWEEN(date1, date2)

Пример

Ето един пример:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;

Резултат:

4

В този случай има точно четири месеца между двете дати.

Месецът и последният ден от месеца се дефинират от параметъра на сесията NLS_CALENDAR . Вижте как да проверите стойностите на NLS параметрите, за да разберете кой календар използва вашата сесия. Моят използва григорианския календар.

Дробни месеци

Функцията позволява частични месеци. Ако двете дати включват различни части от деня, Oracle Database изработва приложимия дробен компонент, който да използва.

Пример:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;

Резултат:

3.51612903225806451612903225806451612903

Отрицателни месеци

Ако втората дата е по-късна от първата, тогава се връща отрицателна сума:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;

Резултат:

-4

Дати извън обхвата

Нулевите дати и други дати извън диапазона водят до грешка.

Пример:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL
Error at Command Line : 1 Column : 47
Error report -
SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0
01841. 00000 -  "(full) year must be between -4713 and +9999, and not be 0"
*Cause:    Illegal year entered
*Action:   Input year in the specified range

Както се казва в съобщението за грешка, (цялата) година трябва да е между -4713 и +9999 , а не 0 .

Сравняване на дата с текущата дата

Можем да предадем SYSDATE като аргумент datetime за сравнение на дата с текущата дата:

SELECT 
    SYSDATE,
    MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;

Резултат:

     SYSDATE     MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') 
____________ ____________________________________________ 
13/AUG/21       -102.587825194145758661887694145758661888

Липсващ аргумент

Извикване на MONTHS_BETWEEN() с грешен брой аргументи или без подаване на аргументи, води до грешка:

SELECT MONTHS_BETWEEN()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00911:невалиден знак

  2. Как да сравним две таблици колона по колона в oracle

  3. Съществува / не съществува:'select 1' vs 'select field'

  4. Oracle Live SQL

  5. групово вмъкване от Java в Oracle