Mýlíš se. MONTHS_BETWEEN
zpracovává časové rozpětí od date '2017-02-28'
do date '2017-03-28'
jako přesně jeden měsíc (stejný den ve dvou sousedních měsících). To si můžete přečíst v dokumentech:https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm
Jedno datum je větší než druhé, takže dostanete kladné nebo záporné číslo (tj. ne nulu) podle toho, který je první a který druhý parametr, a když se dny rovnají, výsledkem bude celé číslo. To je 1 nebo -1 pro sousední měsíce.
Výpočet měsíce je každopádně zvláštní věc, protože měsíc není definované časové rozpětí. Zdá se, že máte na mysli určitou definici, která se prostě liší od MONTHS_BETWEEN
to definuje. Na tom není nic špatného. Souhlasím s MONTHS_BETWEEN
v tomto případě; od 28. února do 28. března je "přesně" jeden měsíc. Pokud chcete jiná pravidla, použijte vlastní matematiku :-)