Oracle months_between函数意外结果

时间:2019-05-27 07:46:06

标签: sql oracle

Oracle的months_between函数返回意外结果。

例如,20191001和20190916之间的差为15天,因此该函数的返回值预计为(1/31)* 15 = 0.4838 ....

SELECT months_between('20191001','20190916')
from dual

.5161290322580645161290322580645161290323

这是规格吗?还是一个错误?

1 个答案:

答案 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