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