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: