No banco de dados Oracle, o
MONTHS_BETWEEN()
A função retorna o número de meses entre duas datas. Sintaxe
A sintaxe fica assim:
MONTHS_BETWEEN(date1, date2)
Exemplo
Aqui está um exemplo:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Resultado:
4
Neste caso, há exatamente quatro meses entre as duas datas.
O mês e o último dia do mês são definidos pelo parâmetro de sessão
NLS_CALENDAR
. Consulte Como verificar os valores dos parâmetros NLS para descobrir qual calendário sua sessão está usando. O meu está usando o calendário gregoriano. Meses fracionários
A função permite meses fracionados. Se as duas datas incluírem diferentes partes do dia, o Oracle Database determinará o componente fracionário aplicável a ser usado.
Exemplo:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Resultado:
3.51612903225806451612903225806451612903
Meses negativos
Se a segunda data for posterior à primeira, será devolvido um valor negativo:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Resultado:
-4
Datas fora do intervalo
Datas zero e outras datas fora do intervalo resultam em erro.
Exemplo:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00') FROM DUAL Error at Command Line : 1 Column : 47 Error report - SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0 01841. 00000 - "(full) year must be between -4713 and +9999, and not be 0" *Cause: Illegal year entered *Action: Input year in the specified range
Como a mensagem de erro indica, o ano (completo) deve estar entre
-4713
e +9999
, e não ser 0
. Comparando uma data com a data atual
Podemos passar
SYSDATE
como argumento datetime para comparar uma data com a data atual:SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
Resultado:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
Argumento ausente
Chamando
MONTHS_BETWEEN()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:SELECT MONTHS_BETWEEN()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: