En Oracle Database, el LAST_DAY()
función devuelve el último día del mes que contiene la fecha proporcionada.
Acepta un argumento, que es la fecha para la que desea encontrar el último día del mes.
Sintaxis
La sintaxis es así:
LAST_DAY(date)
Donde date
es la expresión de fecha para la que desea encontrar el último día del mes.
Ejemplo
He aquí un ejemplo:
SELECT LAST_DAY(DATE '2030-02-01')
FROM DUAL;
Resultado:
28-FEB-30
En este caso, estamos usando una fecha en febrero. Resulta que febrero tiene 28 días en ese año.
Esto es lo que sucede si incrementamos la fecha al siguiente año bisiesto:
SELECT LAST_DAY(DATE '2032-02-01')
FROM DUAL;
Resultado:
29-FEB-32
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á usando su sesión. El mío usa el calendario gregoriano.
Además, la fecha se devuelve en el formato especificado para su sesión. En este ejemplo, mi sesión usa el formato predeterminado para cuando NLS_TERRITORY
el parámetro está establecido en AMERICA
. Siempre puede cambiar los formatos de fecha y hora de su sesión si así lo desea.
Otros valores de fecha y hora
También funciona con otros valores de fecha y hora, como TIMESTAMP
, etc:
SELECT LAST_DAY(TIMESTAMP '2030-02-01 10:30:45.34567')
FROM DUAL;
Resultado:
28-FEB-30
Sin embargo, el tipo de devolución siempre es DATE
, independientemente del tipo de datos del argumento.
Fechas fuera de rango
Las fechas cero y otras fechas fuera de rango dan como resultado un error.
Ejemplo:
SELECT LAST_DAY(DATE '0000-00-00')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LAST_DAY(DATE '0000-00-00') FROM DUAL Error at Command Line : 1 Column : 22 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
.
Fecha actual
Podemos pasar SYSDATE
como argumento de fecha y hora para usar la fecha actual:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Resultado:
SYSDATE LAST_DAY(SYSDATE) ____________ ____________________ 12-AUG-21 31-AUG-21
Argumento faltante
Llamando a LAST_DAY()
con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:
SELECT LAST_DAY()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LAST_DAY() 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: