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