sql >> Databasteknik >  >> RDS >> Database

Hur man får den sista dagen i månaden i T-SQL

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

  1. Hur man ställer in sorteringen av en kolumn i SQL Server (T-SQL)

  2. Skapa en webbapp från grunden med Python Flask och MySQL:Del 2

  3. sql-server ogiltigt objektnamn - men tabeller listas i SSMS-tabelllistan

  4. Hur man åtgärdar felaktigt strängvärde i MySQL