Oracle的months_between函数返回意外结果。
例如,20191001和20190916之间的差为15天,因此该函数的返回值预计为(1/31)* 15 = 0.4838 ....
SELECT months_between('20191001','20190916')
from dual
.5161290322580645161290322580645161290323
这是规格吗?还是一个错误?
答案 0 :(得分:1)
函数MONTHS_BETWEEN可以在31天的月份中使用,而当月的日期不是该月的最后一天时。
SELECT MONTHS_BETWEEN
(TO_DATE('20190201','YYYYMMDD'),
TO_DATE('20190131','YYYYMMDD') ) "Months"
FROM DUAL;
将返回0.032(四舍五入),但
SELECT MONTHS_BETWEEN
(TO_DATE('20190301','YYYYMMDD'),
TO_DATE('20190228','YYYYMMDD') ) "Months"
FROM DUAL;
将返回0.129
有关MONTHS_BETWEN的更完整说明,请参见documentation