Problem:
Du vill hitta den sista dagen i månaden för ett specifikt datum i T-SQL.
Exempel:
Vår databas har en tabell som heter Furniture
med data i kolumnerna Id
, Name
och PurchaseDate
.
Id | Namn | Köpdatum |
---|---|---|
1 | soffa | 2019-02-10 |
2 | skrivbord | 2019-04-01 |
3 | bokhylla | 2019-05-20 |
Låt oss få produktnamn och inköpsdatum och den sista dagen i månaden då dessa varor köptes.
Lösning:
Vi använder funktionen EOMONTH() för att hitta den sista dagen i månaden.
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate) AS LastDayDate FROM Furniture;
Här är resultatet av frågan:
Namn | Köpdatum | LastDayDate |
---|---|---|
soffa | 2019-02-10 | 2019-02-28 |
skrivbord | 2019-04-01 | 2019-04-30 |
bokhylla | 2019-05-20 | 2019-05-31 |
Diskussion:
Om du vill få datumet som innehåller den sista dagen i månaden för ett visst datum, använd funktionen EOMONTH(). Den här funktionen tar ett obligatoriskt argument:ett datum (eller datum och tid), som kan vara en kolumn för datum/datumtid eller ett uttryck som returnerar ett datum. (I vårt exempel använder vi PurchaseDate
kolumn.)
EOMONTH() returnerar den sista dagen i samma månad som argumentet. Ovanstående fråga för soffan med inköpsdatum "2019-02-10" returnerar "2019-02-28"; i februari 2019 var den sista dagen i månaden den 28:e.
Om du vill returnera den sista dagen i den andra, tredje, etc. månaden från ett givet datum, använd EOMONTH()s valfria andra argument:antalet månader att lägga till. Titta på exemplet:
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,1) AS LastDayDate FROM Furniture;
Här är resultatet av frågan:
Namn | Köpdatum | LastDayDate |
---|---|---|
soffa | 2019-02 -10 | 2019-03 -30 |
skrivbord | 2019-04 -01 | 2019-05 -31 |
bokhylla | 2019-05 -20 | 2019-06 -30 |
För soffan med inköpsdatumet "2019-02-10", returnerar denna fråga "2019-03-30" – sista dagen nästa månad. Vi har lagt till en månad till slutet av innevarande månad.
Om du vill hitta den sista dagen i månaden före en given månad, använd ett negativt värde (t.ex. '-1') som det andra argumentet:
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,-1) AS LastDayDate FROM Furniture;
Här är resultatet av frågan:
Namn | Köpdatum | LastDayDate |
---|---|---|
soffa | 2019-02 -10 | 2019-01 -31 |
skrivbord | 2019-04 -01 | 2019-03 -31 |
bokhylla | 2019-05 -20 | 2019-04 -30 |