Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Meses entre não retornar o valor correto


Você está errado. MONTHS_BETWEEN trata o intervalo de tempo de date '2017-02-28' até date '2017-03-28' exatamente um mês (mesmo dia em dois meses adjacentes). Isso pode ser lido nos documentos:https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm

Uma data é maior que a outra, então você obtém um número positivo ou negativo (ou seja, não zero), dependendo de qual é o primeiro e qual é o segundo parâmetro, e como os dias são iguais, o resultado será um número inteiro. Isso é 1 ou -1 para meses adjacentes.

O cálculo do mês é uma coisa estranha de qualquer maneira, pois um mês não é um período de tempo definido. Você parece ter uma certa definição em mente, que simplesmente é diferente de como MONTHS_BETWEEN o define. Nada de errado nisso. Concordo com MONTHS_BETWEEN nesse caso; de 28 de fevereiro a 28 de março é "exatamente" um mês. Se você quiser regras diferentes, aplique sua própria matemática :-)