Problém:
Chcete najít poslední den v měsíci pro konkrétní datum v T-SQL.
Příklad:
Naše databáze obsahuje tabulku s názvem Furniture
s údaji ve sloupcích Id
, Name
a PurchaseDate
.
Id | Jméno | Datum nákupu |
---|---|---|
1 | pohovka | 2019-02-10 |
2 | stůl | 2019-04-01 |
3 | knihovna | 20.05.2019 |
Pojďme získat názvy produktů a data nákupu a poslední den v měsíci, kdy byly tyto položky zakoupeny.
Řešení:
K vyhledání posledního dne v měsíci použijeme funkci EOMONTH().
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate) AS LastDayDate FROM Furniture;
Zde je výsledek dotazu:
Jméno | Datum nákupu | LastDayDate |
---|---|---|
pohovka | 2019-02-10 | 2019-02-28 |
stůl | 2019-04-01 | 2019-04-30 |
knihovna | 2019-05-20 | 2019-05-31 |
Diskuse:
Pokud chcete získat datum obsahující poslední den měsíce daného data, použijte funkci EOMONTH(). Tato funkce přebírá jeden povinný argument:datum (nebo datum a čas), což může být sloupec datum/datum a čas nebo výraz, který vrací datum. (V našem příkladu používáme PurchaseDate
sloupec.)
EOMONTH() vrátí poslední den stejného měsíce jako argument. Výše uvedený dotaz na pohovku s datem nákupu ‚2019-02-10‘ vrací ‚2019-02-28‘; v únoru 2019 byl poslední den v měsíci 28.
Pokud chcete vrátit poslední den druhého, třetího atd. měsíce od daného data, použijte volitelný druhý argument EOMONTH():počet měsíců, které se mají přidat. Podívejte se na příklad:
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,1) AS LastDayDate FROM Furniture;
Zde je výsledek dotazu:
Jméno | Datum nákupu | LastDayDate |
---|---|---|
pohovka | 2019-02 -10 | 2019-03 -30 |
stůl | 2019-04 -01 | 2019–05 -31 |
knihovna | 2019–05 -20 | 2019–06 -30 |
U pohovky s datem nákupu ‚2019-02-10‘ tento dotaz vrátí ‚2019-03-30‘ – poslední den příštího Měsíc. Ke konci aktuálního měsíce jsme přidali jeden měsíc.
Pokud byste chtěli najít poslední den v měsíci před daný měsíc, použijte jako druhý argument zápornou hodnotu (např. „-1“):
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,-1) AS LastDayDate FROM Furniture;
Zde je výsledek dotazu:
Jméno | Datum nákupu | LastDayDate |
---|---|---|
pohovka | 2019-02 -10 | 2019–01 -31 |
stůl | 2019-04 -01 | 2019-03 -31 |
knihovna | 2019–05 -20 | 2019-04 -30 |