sql >> Base de Datos >  >> RDS >> Oracle

Función MONTHS_BETWEEN() en Oracle

En Oracle Database, MONTHS_BETWEEN() función devuelve el número de meses entre dos fechas.

Sintaxis

La sintaxis es así:

MONTHS_BETWEEN(date1, date2)

Ejemplo

He aquí un ejemplo:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;

Resultado:

4

En este caso hay exactamente cuatro meses entre las dos fechas.

El mes y el último día del mes están definidos por el parámetro de sesión NLS_CALENDAR . Consulte Cómo verificar los valores de los parámetros NLS para averiguar qué calendario está utilizando su sesión. El mío usa el calendario gregoriano.

Meses fraccionarios

La función permite meses fraccionarios. Si las dos fechas incluyen porciones de días diferentes, entonces Oracle Database calcula el componente fraccional aplicable a usar.

Ejemplo:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;

Resultado:

3.51612903225806451612903225806451612903

Meses negativos

Si la segunda fecha es posterior a la primera, se devuelve una cantidad negativa:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;

Resultado:

-4

Fechas fuera de rango

Las fechas cero y otras fechas fuera de rango dan como resultado un error.

Ejemplo:

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 indica el mensaje de error, el año (completo) debe estar entre -4713 y +9999 , y no ser 0 .

Comparar una fecha con la fecha actual

Podemos pasar SYSDATE como argumento de fecha y hora para comparar una fecha con la fecha actual:

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 faltante

Llamando a MONTHS_BETWEEN() con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:

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: