MONTHS_BETWEEN函数会返回日期类型的date1和date2之间的相差的月份。
(1)如果date1晚于date2,返回的结果就是正数。
SELECT MONTHS_BETWEEN(TO_DATE('2017-05-19', 'YYYY-MM-DD'),
TO_DATE('2017-03-23', 'YYYY-MM-DD')) MONTHS
FROM DUAL;
1.87096774193548
(2)如果date1早于date2,那么返回的就是一个负数。
SELECT MONTHS_BETWEEN(TO_DATE('2017-03-23', 'YYYY-MM-DD'),
TO_DATE('2017-05-19', 'YYYY-MM-DD')) MONTHS
FROM DUAL;
-1.87096774193548
(3)如果date1和date2要么是月里的同日或者月的最后一日,返回的结果总是一个整数。
SELECT MONTHS_BETWEEN(TO_DATE('2017-05-19', 'YYYY-MM-DD'),
TO_DATE('2017-03-19', 'YYYY-MM-DD')) MONTHS
FROM DUAL;
2
(4)否则Oracle会在每月31天的基础上计算出一个带有小数部分的结果,并且会考虑到date1和date2的组成部分。
SELECT MONTHS_BETWEEN(TO_DATE('2017-05-18', 'YYYY-MM-DD'),
TO_DATE('2017-03-19', 'YYYY-MM-DD')) MONTHS
FROM DUAL;
1.96774193548387