Database
 sql >> Base de Dados >  >> RDS >> Database

Como obter o último dia do mês em T-SQL

Problema:


Você gostaria de encontrar o último dia do mês para uma data específica no T-SQL.

Exemplo:


Nosso banco de dados tem uma tabela chamada Furniture com dados nas colunas Id , Name e PurchaseDate .
Id Nome Data de compra
1 sofá 2019-02-10
2 mesa 2019-04-01
3 estante 20-05-2019

Vamos obter os nomes dos produtos e as datas de compra e o último dia do mês em que esses itens foram comprados.

Solução:


Usaremos a função EOMONTH() para encontrar o último dia do mês.
SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate) AS LastDayDate
FROM Furniture;

Segue o resultado da consulta:
Nome Data de compra ÚltimoDia
sofá 2019-02-10 2019-02-28
mesa 2019-04-01 2019-04-30
estante 2019-05-20 2019-05-31

Discussão:


Se você deseja obter a data que contém o último dia do mês de uma determinada data, use a função EOMONTH(). Essa função recebe um argumento obrigatório:uma data (ou data e hora), que pode ser uma coluna de data/datahora ou uma expressão que retorna uma data. (Em nosso exemplo, usamos o PurchaseDate coluna.)

EOMONTH() retorna o último dia do mesmo mês que o argumento. A consulta acima para o sofá com a data de compra '2019-02-10' retorna '2019-02-28'; em fevereiro de 2019, o último dia do mês era 28.

Se você quiser retornar o último dia do segundo, terceiro, etc. mês de uma determinada data, use o segundo argumento opcional de EOMONTH():o número de meses a ser adicionado. Olhe para o exemplo:
SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,1) AS LastDayDate
FROM Furniture;

Segue o resultado da consulta:
Nome Data de compra ÚltimoDia
sofá 2019-02 -10 2019-03 -30
mesa 2019-04 -01 2019-05 -31
estante 2019-05 -20 2019-06 -30

Para o sofá com a data de compra '2019-02-10', esta consulta retorna '2019-03-30' – o último dia do próximo mês. Adicionamos um mês ao final do mês atual.

Se você quiser encontrar o último dia do mês antes um determinado mês, use um valor negativo (por exemplo, '-1') como o segundo argumento:
SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,-1) AS LastDayDate
FROM Furniture;

Segue o resultado da consulta:
Nome Data de compra ÚltimoDia
sofá 2019-02 -10 2019-01 -31
mesa 2019-04 -01 2019-03 -31
estante 2019-05 -20 2019-04 -30