Tui hai torto. MONTHS_BETWEEN
tratta l'intervallo di tempo dalla date '2017-02-28'
a date '2017-03-28'
esattamente come un mese (lo stesso giorno in due mesi adiacenti). Questo può essere letto nei documenti:https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm
Una data è più grande dell'altra, quindi ottieni un numero positivo o negativo (cioè non zero) a seconda di quale è il primo e quale è il secondo parametro e, a parità di giorni, il risultato sarà un numero intero. Questo è 1 o -1 per i mesi adiacenti.
Il calcolo del mese è comunque una cosa strana, poiché un mese non è un intervallo di tempo definito. Sembra che tu abbia in mente una certa definizione, che è semplicemente diversa da come MONTHS_BETWEEN
lo definisce. Niente di sbagliato in questo. Sono d'accordo con MONTHS_BETWEEN
in questo caso; dal 28 febbraio al 28 marzo è "esattamente" un mese. Se vuoi regole diverse, applica la tua matematica :-)