Ich muss die Anzahl der Tage in einem Monat für ein bestimmtes Datum in SQL Server bestimmen.
Gibt es eine eingebaute Funktion? Wenn nicht, was soll ich als benutzerdefinierte Funktion verwenden?
sql
sql-server
datetime
date
user-defined-functions
Sogar Mien
quelle
quelle
case when datediff(m, dateadd(day, 1-day(@date), @date), convert(date, convert(datetime, 2958463))) > 0 then datediff(day, dateadd(day, 1-day(@date), @date), dateadd(month, 1, dateadd(day, 1-day(@date), @date))) else 31 end
day
Komponente dereomonth
Ausgabe zu erhalten.In SQL Server 2012 können Sie EOMONTH (Transact-SQL) verwenden , um den letzten Tag des Monats abzurufen, und dann können Sie DAY (Transact-SQL) verwenden , um die Anzahl der Tage im Monat abzurufen .
quelle
Die eleganteste Lösung: funktioniert für jedes @DATE
Wirf es in eine Funktion oder verwende 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 31SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
Rückgabe 29SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
Rückgabe 31quelle
Viel einfacher ... versuchen
day(eomonth(@Date))
quelle
Persönlich würde ich eine UDF dafür erstellen, wenn es keine eingebaute Funktion gibt ...
quelle
Ich würde vorschlagen:
quelle
Mit diesem Code erhalten Sie die Anzahl der Tage im aktuellen Monat:
Wechseln Sie
getdate()
zu dem Datum, für das Sie Tage zählen müssen.quelle
quelle
Lösung 1: Ermitteln Sie die Anzahl der Tage in dem Monat, in dem wir uns gerade befinden
Lösung 2: Ermitteln Sie die Anzahl der Tage in einer bestimmten Monat-Jahr-Kombination
quelle
Sie müssen eine Funktion hinzufügen, aber es ist eine einfache. Ich benutze das:
quelle
quelle
Schön Einfach und erfordert keine Erstellung von Funktionen
quelle
Sie müssen eine Funktion erstellen, dies dient jedoch Ihrer eigenen Bequemlichkeit. Es funktioniert perfekt und ich habe mit dieser Funktion keine fehlerhaften Berechnungen festgestellt.
So funktioniert es: Wenn Sie die Tagesnummer des Datums vom Datum selbst abziehen, erhalten Sie den letzten Tag des Vormonats. Sie müssen also einen Monat zum angegebenen Datum hinzufügen, die Tageszahl subtrahieren und die Tageskomponente des Ergebnisses erhalten.
quelle
quelle
Ich habe Mehrdad positiv bewertet, aber das funktioniert auch. :) :)
Zu testen
quelle
hier ist ein anderes...
quelle
Ich weiß, dass diese Frage alt ist, aber ich dachte, ich würde teilen, was ich benutze.
und
Diese können kombiniert werden, um eine einzelne Funktion zu erstellen, mit der bei Bedarf die Anzahl der Tage in einem Monat abgerufen werden kann.
quelle
Nice 'n' Simple und erfordert keine Erstellung von Funktionen
quelle
subdate
Funktion gehört.Die Antwort von Mehrdad Afshari ist am genauesten. Abgesehen von der üblichen Antwort basiert diese Antwort auf einem formalen mathematischen Ansatz, den Curtis McEnroe in seinem Blog https://cmcenroe.me/2014/12/05/days-in-month-formula.html angegeben hat
quelle
Um die Nr. Zu bekommen. von Tagen in einem Monat können wir Day () direkt verwenden, das in SQL verfügbar ist.
Folgen Sie dem Link am Ende meiner Antwort für SQL Server 2005/2008.
Das folgende Beispiel und das Ergebnis stammen aus SQL 2012
Ergebnis in SQL Server SSMS
Prozess:
Wenn EOMONTH verwendet wird, wird das von uns verwendete Datumsformat in das DateTime-Format von SQL-Server konvertiert. Dann ist die Datumsausgabe von EOMONTH () der 31.12.2016 mit 2016 als Jahr, 12 als Monat und 31 als Tagen. Wenn diese Ausgabe an Day () übergeben wird, erhalten Sie die Gesamtzahl der Tage im Monat.
Wenn wir das sofortige Ergebnis für die Überprüfung erhalten möchten, können wir den folgenden Code direkt ausführen:
oder
Um auf die Arbeit in SQL Server 2005/2008/2012 zu verweisen, folgen Sie bitte dem folgenden externen Link ...
Finden Sie die Anzahl der Tage in einem Monat in SQL
quelle
Ergebnis: Diesen Monat 31
Nächster Monat 30
quelle
quelle
quelle
Für jedes Datum
quelle
quelle
einfache Abfrage in SQLServer2012:
Tag auswählen (('20-05-1951 22:00:00'))
Ich habe für viele Daten getestet und es wird immer ein korrektes Ergebnis zurückgegeben
quelle
Wählen Sie first_day = dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), last_day = dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())). , dateadd (mm, 1, getdate ())), no_of_days = 1 + dateiff (dd, dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), dateadd (dd, -1 * Datumsteil (dd, dateadd (mm, 1, getdate ())), dateadd (mm, 1, getdate ()))
Ersetzen Sie ein Datum durch getdate, um die Anzahl der Monate in diesem bestimmten Datum zu erhalten
quelle
quelle