В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию MONTHS_BETWEEN с синтаксисом и примерами.
Описание
Oracle/PLSQL функция MONTHS_BETWEEN возвращает количество месяцев между date1 и date2.
Синтаксис
Синтаксис Oracle/PLSQL функции MONTHS_BETWEEN:
Параметры или аргументы
date1 и date2 даты, используемые для расчета количества месяцев.
Примечание
- Функция MONTHS_BETWEEN возвращает numeric значение.
- Если рассчитывается дробная месяца, функция MONTHS_BETWEEN вычисляет долю на основе 31-дневного месяца.
Применение
Функцию MONTHS_BETWEEN можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i
Пример
Рассмотрим несколько примеров функции MONTHS_BETWEEN и изучим, как использовать функцию MONTHS_BETWEEN в Oracle/PLSQL.
1 2 3 4 5 6 7 8 9 10 11 |
SELECT MONTHS_BETWEEN (TO_DATE ('2003/01/01', 'yyyy/mm/dd'), TO_DATE ('2003/03/14', 'yyyy/mm/dd')) FROM DUAL; --Результат: -2,4193548 SELECT MONTHS_BETWEEN (TO_DATE ('2003/07/02', 'yyyy/mm/dd'), TO_DATE ('2003/07/02', 'yyyy/mm/dd')) FROM DUAL; --Результат: 0 SELECT MONTHS_BETWEEN (TO_DATE ('2003/08/02', 'yyyy/mm/dd'), TO_DATE ('2003/06/02', 'yyyy/mm/dd')) FROM DUAL; --Результат: 2 |
Часто задаваемые вопросы
Вопрос:Как посчитать количество лет, месяцев и дней из общего количества дней?
Ответ:
Для этого с помощью Oracle/PLSQL оператора WITH сгенерируем однострочную табличку t состоящую из двух дат - d1 и d2. Затем с помощью Oracle/PLSQL функций MONTHS_BETWEEN, MOD, FLOOR и ADD_MONTHS составим запрос, который и вернет значение лет, месяцев и дней между d2 текущей датой и d1 на 484 дня ранее (вместо d1 можно указать любую дату).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
WITH t AS ( SELECT sysdate d2 ,sysdate-484 d1 FROM dual --484 - количество дней, которые нужно перевести в количество лет, месяцев и дней ) SELECT floor(months_between(d2,d1)/12) yy -- количество лет ,floor(mod(months_between(d2,d1),12)) mm -- количество месяцев ,d2-add_months(d1,floor(months_between(d2,d1))) dd -- количество дней FROM t; --Результат: --YY 1 --MM 3 --DD 27 |
В результате запроса получим 1 год, 3 месяца и 27 дней. Запрос подойдет для расчета стажа, который считается исходя из даты приема и текущей даты.