Frage Wie Ermitteln der Anzahl der Tage in einem Monat in SQL Server?


Ich muss die Anzahl der Tage in einem Monat für ein bestimmtes Datum in SQL Server ermitteln.

Gibt es eine eingebaute Funktion? Wenn nicht, was sollte ich als benutzerdefinierte Funktion verwenden?


75
2018-03-27 18:46


Ursprung


Antworten:


Sie können Folgendes mit dem ersten Tag des angegebenen Monats verwenden:

datediff(day, @date, dateadd(month, 1, @date))

Damit es für jedes Datum funktioniert:

datediff(day, dateadd(day, 1-day(@date), @date),
              dateadd(month, 1, dateadd(day, 1-day(@date), @date)))

106
2018-03-27 19:00



In SQL Server 2012 können Sie verwenden EOMONTH (Transact-SQL) um den letzten Tag des Monats zu bekommen und dann können Sie verwenden TAG (Transact-SQL) um die Anzahl der Tage im Monat zu erhalten.

DECLARE @ADate DATETIME

SET @ADate = GETDATE()

SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth

120
2018-02-02 09:40



Eleganteste Lösung: funktioniert für jeden @DATUM

DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0)))

Wirf es in eine Funktion oder benutze es einfach inline. Dies beantwortet die ursprüngliche Frage ohne all den zusätzlichen Müll in den anderen Antworten.

Beispiele für Daten aus anderen Antworten:

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))  Rückgabe 31

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))  Rückkehr 29

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))  Rückgabe 31


20
2017-10-25 22:42



Viel einfacher ... versuchen Sie es day(eomonth(@Date))


15
2018-06-05 14:36



--Last Day of Previous Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))

--Last Day of Current Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))

--Last Day of Next Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)))

Persönlich würde ich jedoch eine UDF dafür machen, wenn es keine eingebaute Funktion gibt ...


11
2018-03-27 19:03



Mit diesem Code erhalten Sie die Anzahl der Tage im aktuellen Monat:

SELECT datediff(dd,getdate(),dateadd(mm,1,getdate())) as datas

Veränderung getdate() auf das Datum, für das Sie Tage zählen müssen.


3
2018-04-28 10:55



Ich würde vorschlagen:

Tag auswählen (EOMONTH (getdate ()))


3
2018-04-05 07:07