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 |