T-SQL Ninja #53

EOMONTH

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.

Referenzen

Ninja-Notebooks @ GitHub

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.