Mylisz się. MONTHS_BETWEEN
traktuje przedział czasu od date '2017-02-28'
do date '2017-03-28'
dokładnie jeden miesiąc (ten sam dzień w dwóch sąsiednich miesiącach). Można to przeczytać w dokumentacji:https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm
Jedna data jest większa od drugiej, więc otrzymujesz liczbę dodatnią lub ujemną (tzn. nie zero) w zależności od tego, który parametr jest pierwszy, a który drugi, a ponieważ dni są równe, wynik będzie liczbą całkowitą. To jest 1 lub -1 dla sąsiednich miesięcy.
Obliczanie miesiąca i tak jest dziwne, ponieważ miesiąc nie jest zdefiniowany. Wygląda na to, że masz na myśli pewną definicję, która po prostu różni się od sposobu, w jaki MONTHS_BETWEEN
definiuje to. Nic w tym złego. Zgadzam się z MONTHS_BETWEEN
w tym przypadku; od 28 lutego do 28 marca to „dokładnie” jeden miesiąc. Jeśli chcesz mieć inne zasady, zastosuj własną matematykę :-)