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

Función LAST_DAY() en Oracle

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: