日期算术 - 月份或年份的日期差异

使用 MONTHS_BETWEEN( date1, date2 ) 可以找到两个日期之间的月份差异

SELECT MONTHS_BETWEEN( DATE '2016-03-10', DATE '2015-03-10' ) AS difference FROM DUAL;

输出:

DIFFERENCE        12

如果差异包括部分月份,那么它将根据每月 31 天返回月份的分数 :

SELECT MONTHS_BETWEEN( DATE '2015-02-15', DATE '2015-01-01' ) AS difference FROM DUAL;

输出:

DIFFERENCE 1.4516129

由于 MONTHS_BETWEEN 假设每月 31 天,每月可以减少天数,那么这可能导致跨越月份之间边界的差异的不同值。

例:

SELECT MONTHS_BETWEEN( DATE'2016-02-01', DATE'2016-02-01' - INTERVAL '1' DAY ) AS "JAN-FEB",
       MONTHS_BETWEEN( DATE'2016-03-01', DATE'2016-03-01' - INTERVAL '1' DAY ) AS "FEB-MAR",
       MONTHS_BETWEEN( DATE'2016-04-01', DATE'2016-04-01' - INTERVAL '1' DAY ) AS "MAR-APR",
       MONTHS_BETWEEN( DATE'2016-05-01', DATE'2016-05-01' - INTERVAL '1' DAY ) AS "APR-MAY"
FROM   DUAL;

输出:

JAN-FEB FEB-MAR MAR-APR APR-MAY
------- ------- ------- -------
0.03226 0.09677 0.03226 0.06452

可以通过将月差除以 12 来找到年份的差异。