Problem:
Chcesz znaleźć ostatni dzień miesiąca dla określonej daty w T-SQL.
Przykład:
Nasza baza danych zawiera tabelę o nazwie Furniture
z danymi w kolumnach Id
, Name
i PurchaseDate
.
Identyfikator | Nazwa | Data zakupu |
---|---|---|
1 | sofa | 2019-02-10 |
2 | biurko | 2019-04-01 |
3 | regał | 2019-05-20 |
Uzyskajmy nazwy produktów i daty zakupu oraz ostatni dzień miesiąca, w którym te produkty zostały zakupione.
Rozwiązanie:
Użyjemy funkcji EOMONTH(), aby znaleźć ostatni dzień miesiąca.
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate) AS LastDayDate FROM Furniture;
Oto wynik zapytania:
Nazwa | Data zakupu | Data ostatniego dnia |
---|---|---|
sofa | 2019-02-10 | 2019-02-28 |
biurko | 2019-04-01 | 2019-04-30 |
regał | 2019-05-20 | 2019-05-31 |
Dyskusja:
Jeśli chciałbyś otrzymać datę zawierającą ostatni dzień miesiąca w danej dacie, użyj funkcji EOMONTH(). Ta funkcja przyjmuje jeden obowiązkowy argument:datę (lub datę i godzinę), która może być kolumną daty/daty/godziny lub wyrażeniem zwracającym datę. (W naszym przykładzie używamy PurchaseDate
kolumna.)
EOMONTH() zwraca ostatni dzień tego samego miesiąca jako argument. Powyższe zapytanie o sofę z datą zakupu ‘2019-02-10’ zwraca ‘2019-02-28’; w lutym 2019 ostatnim dniem miesiąca był 28.
Jeśli chcesz zwrócić ostatni dzień drugiego, trzeciego itd. miesiąca od podanej daty, użyj opcjonalnego drugiego argumentu funkcji EOMONTH():liczby miesięcy do dodania. Spójrz na przykład:
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,1) AS LastDayDate FROM Furniture;
Oto wynik zapytania:
Nazwa | Data zakupu | Data ostatniego dnia |
---|---|---|
sofa | 2019-02 -10 | 2019-03 -30 |
biurko | 2019-04 -01 | 2019-05 -31 |
regał | 2019-05 -20 | 2019-06 -30 |
W przypadku sofy z datą zakupu „2019-02-10” to zapytanie zwraca „2019-03-30” – ostatni dzień następnego miesiąc. Do końca bieżącego miesiąca dodaliśmy jeden miesiąc.
Jeśli chcesz znaleźć ostatni dzień miesiąca przed w danym miesiącu, jako drugi argument użyj wartości ujemnej (np. „-1”):
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,-1) AS LastDayDate FROM Furniture;
Oto wynik zapytania:
Nazwa | Data zakupu | Data ostatniego dnia |
---|---|---|
sofa | 2019-02 -10 | 2019-01 -31 |
biurko | 2019-04 -01 | 2019-03 -31 |
regał | 2019-05 -20 | 2019-04 -30 |