En Oracle Database podemos usar el LAST_DAY()
función para devolver el último día de un mes dado. Puede ser el último día del mes actual o el último día del mes según una fecha específica.
Ejemplo
SELECT LAST_DAY(date '2035-02-15')
FROM DUAL;
Resultado:
28-FEB-35
El último día del mes está definido 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.
Esto es lo que sucede cuando adelantamos la fecha un año:
SELECT LAST_DAY(date '2036-02-15')
FROM DUAL;
Resultado:
29-FEB-36
El año siguiente es un año bisiesto, por lo que tenemos 29 días en febrero de ese año.
Tenga en cuenta que el LAST_DAY()
la función devuelve un DATE
valor. Esto es cierto incluso si pasamos un TIMESTAMP
valor:
SELECT LAST_DAY(TIMESTAMP '2036-07-15 15:30:45.12345')
FROM DUAL;
Resultado:
31-JUL-36
Mes actual
Este ejemplo obtiene el último día del mes actual:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Resultado:
SYSDATE | ÚLTIMO_DÍA(SYSDATE) |
---|---|
12-ABR-22 | 30-ABR-22 |
En este caso usé SYSDATE
para la fecha actual.
Próximo mes
Podemos usar el ADD_MONTHS()
función para agregar uno o más meses a la fecha actual:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, 1))
FROM DUAL;
Resultado:
SYSDATE | ÚLTIMO_DÍA(AÑADIR_MESES(SYSDATE,1)) |
---|---|
12-ABR-22 | 31-MAY-22 |
En este caso, tenemos el último día del próximo mes.
Mes pasado
Podemos agregar un valor negativo para obtener el último día de un mes anterior:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, -1))
FROM DUAL;
Resultado:
SYSDATE | ÚLTIMO_DÍA(ADD_MONTHS(SYSDATE,-1)) |
---|---|
12-ABR-22 | 31-MAR-22 |