Oracle
 sql >> Database >  >> RDS >> Oracle

Mesi tra la mancata restituzione del valore corretto

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 :-)