Vous avez tort. MONTHS_BETWEEN
traite l'intervalle de temps à partir de la date '2017-02-28'
au date '2017-03-28'
exactement comme un mois (le même jour dans deux mois consécutifs). Cela peut être lu dans les docs :https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm
Une date est plus grande que l'autre, vous obtenez donc un nombre positif ou négatif (c'est-à-dire non nul) selon le premier et le deuxième paramètre, et comme les jours sont égaux, le résultat sera un entier. C'est 1 ou -1 pour les mois adjacents.
Le calcul du mois est une chose étrange de toute façon, car un mois n'est pas un laps de temps défini. Vous semblez avoir une certaine définition en tête, qui est tout simplement différente de la façon dont MONTHS_BETWEEN
le définit. Rien de mal à cela. Je suis d'accord avec MONTHS_BETWEEN
dans ce cas; du 28 février au 28 mars, c'est "exactement" un mois. Si vous voulez des règles différentes, appliquez vos propres calculs :-)