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

Função MONTHS_BETWEEN() no Oracle


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: