No banco de dados Oracle, o
LAST_DAY()
A função retorna o último dia do mês que contém a data fornecida. Ele aceita um argumento, que é a data para a qual você deseja encontrar o último dia do mês.
Sintaxe
A sintaxe fica assim:
LAST_DAY(date)
Onde
date
é a expressão de data para a qual você deseja localizar o último dia do mês. Exemplo
Aqui está um exemplo:
SELECT LAST_DAY(DATE '2030-02-01')
FROM DUAL;
Resultado:
28-FEB-30
Nesse caso, estamos usando uma data em fevereiro. Como se vê, fevereiro tem 28 dias naquele ano.
Aqui está o que acontece se incrementarmos a data para o próximo ano bissexto:
SELECT LAST_DAY(DATE '2032-02-01')
FROM DUAL;
Resultado:
29-FEB-32
O último dia do mês é definido pelo parâmetro de sessão
NLS_CALENDAR
. Consulte Como verificar os valores dos parâmetros NLS para descobrir qual calendário sua sessão está usando. O meu está usando o calendário gregoriano. Além disso, a data é retornada no formato especificado para sua sessão. Neste exemplo, minha sessão está usando o formato padrão para quando o
NLS_TERRITORY
parâmetro está definido como AMERICA
. Você sempre pode alterar os formatos de data e hora da sua sessão, se desejar. Outros valores de data e hora
Ele também funciona com outros valores de data e hora, como
TIMESTAMP
, etc:SELECT LAST_DAY(TIMESTAMP '2030-02-01 10:30:45.34567')
FROM DUAL;
Resultado:
28-FEB-30
No entanto, o tipo de retorno é sempre
DATE
, independentemente do tipo de dados do argumento. Datas fora do intervalo
Datas zero e outras datas fora do intervalo resultam em erro.
Exemplo:
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 a mensagem de erro indica, o ano (completo) deve estar entre
-4713
e +9999
, e não ser 0
. Data atual
Podemos passar
SYSDATE
como argumento datetime para usar a data atual:SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Resultado:
SYSDATE LAST_DAY(SYSDATE) ____________ ____________________ 12-AUG-21 31-AUG-21
Argumento ausente
Chamando
LAST_DAY()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro: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: