Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função LAST_DAY() no Oracle


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: