MONTHS_BETWEEN功能

时间:2016-07-27 14:46:21

标签: oracle

有人可以帮我理解Oracle Months_Between函数的工作情况吗? 如果我查询select MONTHS_BETWEEN('02-28-2015', '01-28-2015') 我得到一个整数值1,但如果我查询 select MONTHS_BETWEEN('02-28-2015', '01-29-2015')我得到0.96。

2 个答案:

答案 0 :(得分:2)

Google可以为您提供帮助。允许您搜索" Oracle months_between"。这将带您到文档。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions089.htm

注意 - " 31天月"惯例可能会在月末造成奇怪的结果。考虑:

select months_between(date '2016-07-02', date '2016-07-01') as one_day,
       months_between(date '2016-07-01', date '2016-06-30') as another_day
from dual;

   ONE_DAY ANOTHER_DAY
---------- -----------
.032258065  .064516129

1 row selected.

好像六月有31天。它没有,但months_between就像对待它一样对待它。

答案 1 :(得分:0)

如果您正在努力确定一组月内的月数而不关心日期。我经常发现自己处于这种情况......你可以做一些日期操作,这对于确定一个月内的月数是相当可靠的。比如七月到九月,以日期开头。

所以:

WITH MONTHS AS (
SELECT
   SYSDATE     DATE_ONE
,  SYSDATE+57  DATE_TWO
FROM DUAL
)


SELECT
m.*
,TO_CHAR(m.DATE_ONE,'MON') START_MONTH
,TO_CHAR(m.DATE_TWO,'MON') END_MONTH
,MONTHS_BETWEEN(m.DATE_TWO,m.DATE_ONE)                                     UNEXPECTED_RESULT
,MONTHS_BETWEEN(LAST_DAY(m.DATE_TWO),LAST_DAY(ADD_MONTHS(m.DATE_ONE,-1)))  EXPECTED_RESULT
FROM MONTHS m
;