Ти грешиш. MONTHS_BETWEEN
третира периода от време от date '2017-02-28'
до date '2017-03-28'
като точно един месец (един и същ ден в два съседни месеца). Това може да се прочете в документите:https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm
Една дата е по-голяма от другата, така че получавате положително или отрицателно число (т.е. не нула) в зависимост от това кой е първият и кой е вторият параметър, и тъй като дните са равни, резултатът ще бъде цяло число. Това е 1 или -1 за следващите месеци.
Изчисляването на месеца е странно нещо така или иначе, тъй като месецът не е определен период от време. Изглежда, че имате предвид определено определение, което просто е различно от това как MONTHS_BETWEEN
го определя. Нищо лошо в това. Бих се съгласил с MONTHS_BETWEEN
в такъв случай; от 28 февруари до 28 март е "точно" един месец. Ако искате различни правила, приложете собствената си математика :-)