No Oracle Database podemos usar o
LAST_DAY()
função para retornar o último dia de um determinado mês. Este pode ser o último dia do mês atual ou o último dia do mês com base em uma data especificada. Exemplo
SELECT LAST_DAY(date '2035-02-15')
FROM DUAL;
Resultado:
28-FEB-35
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. Veja o que acontece quando avançamos a data em um ano:
SELECT LAST_DAY(date '2036-02-15')
FROM DUAL;
Resultado:
29-FEB-36
O ano seguinte é um ano bissexto e, portanto, temos 29 dias em fevereiro daquele ano.
Observe que o
LAST_DAY()
função retorna um DATE
valor. Isso é verdade mesmo se passarmos um TIMESTAMP
valor:SELECT LAST_DAY(TIMESTAMP '2036-07-15 15:30:45.12345')
FROM DUAL;
Resultado:
31-JUL-36
Mês atual
Este exemplo obtém o último dia do mês atual:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Resultado:
SYSDATE | LAST_DAY(SYSDATE) |
---|---|
12-APR-22 | 30-APR-22 |
Neste caso eu usei
SYSDATE
para a data atual. Próximo mês
Podemos usar o
ADD_MONTHS()
função para adicionar um ou mais meses à data atual:SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, 1))
FROM DUAL;
Resultado:
SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,1)) |
---|---|
12-APR-22 | 31-MAI-22 |
Neste caso, temos o último dia do próximo mês.
Último mês
Podemos adicionar um valor negativo para obter o último dia de um mês anterior:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, -1))
FROM DUAL;
Resultado:
SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,-1)) |
---|---|
12-APR-22 | 31-MAR-22 |