Select MOD (RUNC (MONTHS_BETWEEN (TO_DATE (\'28-Mar-2017\', \'DD-MON-YYYY\'),
TO_DATE (\'28-Feb-2017\', \'DD-MON-YYYY\'))), 12) Months from dual
Why i
Because it is working to its documented specification:
MONTHS_BETWEEN
returns number of months between datesdate1
anddate2
. The month and the last day of the month are defined by the parameterNLS_CALENDAR
. Ifdate1
is later thandate2
, then the result is positive. Ifdate1
is earlier thandate2
, then the result is negative. Ifdate1
anddate2
are either the same days of the month or both last days of months, then the result is always an integer. Otherwise Oracle Database calculates the fractional portion of the result based on a 31-day month and considers the difference in time componentsdate1
anddate2
.
If you have requirements that are different to this then you will need to write your own function.