Was ist EOMONTH?
Datumsmanipulationen sind, wie wir bereits mehrfach im Verlauf des Jahres festgestellt hatten, immer mit Schmerzen für den geneigten Ninja verbunden. Deshalb gibt es auch zahlreiche Funktionen, die da helfen können. EOMONTH
gehört auch in diese Kategorie und berechnet zu einem übergebenen Datum das Ende des jeweiligen Monats.
Wie könnt ihr mit EOMONTH arbeiten?
Fangen wir damit an, das Ende des aktuellen Monats zu berechnen. Das tut ihr wie folgt:
SELECT EOMONTH(GETDATE())
Damit könnten wir hier einen Blitz-Ninja beenden und euch für dieses Jahr verlassen, doch wollen wir uns lieber noch ein wenig mit EOMONTH beschäftigen und ein paar praktische Beispiele für die Verwendung geben.
Den Monatsersten des Folgemonats ermittelt ihr folgerichtig so:
SELECT DATEADD(DAY, 1, EOMONTH(GETDATE()))
Und den ersten dieses Monats dann folgerichtig so:
SELECT DATEADD(DAY, 1, EOMONTH(DATEADD(MONTH, -1, GETDATE())))
Dass da auch in Schaltjahren funktioniert könnt ihr natürlich auch überprüfen:
SELECT EOMONTH('2020-02-02')
Alle Monatsersten der letzten 12 Monate könnt ihr wie folgt ermitteln:
SELECT DATENAME( WEEKDAY ,DATEADD(DAY, 1, EOMONTH(DATEADD(MONTH, -m, GETDATE())))) ,DATENAME( MONTH ,DATEADD(DAY, 1, EOMONTH(DATEADD(MONTH, -m, GETDATE())))) FROM ( VALUES (1) ,(2) ,(3) ,(4) ,(5) ,(6) ,(7) ,(8) ,(9) ,(10) ,(11) ,(12) ) AS t(m)
Das könnt ihr aber auch abkürzen, indem ihr das zweite Argument von EOMONTH
verwendet, dass angibt, wieviele Monate ihr euch vom übergebenen Datum entfernen möchtet:
SELECT DATENAME( WEEKDAY ,DATEADD(DAY, 1, EOMONTH(GETDATE(), -m))) ,DATENAME( MONTH ,DATEADD(DAY, 1, EOMONTH(GETDATE(), -m))) FROM ( VALUES (1) ,(2) ,(3) ,(4) ,(5) ,(6) ,(7) ,(8) ,(9) ,(10) ,(11) ,(12) ) AS t(m)
Das heißt hier habt ihr sogar eine rudimentäre Datumsarithmetik mit eingebaut. Insgesamt macht EOMONTH
euch das Leben viel leichter, gerade wenn es um die Berechnung von Stichtagen geht. In diesem Sinne wünschen wir euch einen schönen
SELECT EOMONTH(GETDATE())
Einen guten Rutsch in den
SELECT DATEADD(DAY, 1, EOMONTH(GETDATE()))
Und danke dass ihr dem Ninja über das Jahr 2020 gefolgt seid.