MONTHS_BETWEEN函数未给出预期结果

时间:2017-07-05 03:41:33

标签: sql oracle

我正在使用MONTHS_BETWEEN函数来获取2个日期之间的差异,但结果不是100%正确我认为此函数开采1天。 我试过这个SQL

 SELECT MONTHS_BETWEEN(TO_DATE('20170630','YYYYMMDD'),
   TO_DATE('20170501','YYYYMMDD') ) "Months"
    FROM DUAL;

在这种情况下,它应该返回2,但结果是1.93548387096774 那么,任何帮助?或者有没有办法再增加1天?

2 个答案:

答案 0 :(得分:0)

尝试

SELECT ROUND( MONTHS_BETWEEN(
  TO_DATE('20170630','YYYYMMDD'), 
  TO_DATE('20170501','YYYYMMDD'))) 
"Months" FROM DUAL;
如果天数不同并且它们都不指定月份的最后一天,则

MONTHS_BETWEEN返回小数结果。有关详细信息,请参阅http://www.sqlines.com/oracle/functions/months_between

答案 1 :(得分:0)

之间的月份将给出相对于整月的小数值。因此,从1st Jan1st Feb,您将获得1。但是从1st Jan31st Jan,您将无法获得准确的1。它将是0.9...。同样地,从31st Jan28th Feb(非闰年),您将获得1.

因此,您将从21st May或从1st July30th April获得30th June

1st May30th June,您永远不会得到确切的2。

如果您想要完全2,请将1天添加到更长日期或从start_date减去1天。

DBFiddle Demo