Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So finden Sie den letzten Tag des Monats in SQL Server

Beginnend mit SQL Server 2012, dem EOMONTH() Mit dieser Funktion können Sie den letzten Tag eines bestimmten Monats finden. Es akzeptiert zwei Argumente; eines für das Startdatum und ein optionales Argument, um anzugeben, wie viele Monate zu diesem Datum hinzugefügt werden sollen.

Dieser Artikel enthält Beispiele, die veranschaulichen, wie EOMONTH() funktioniert in SQL Server.

Syntax

Hier ist zunächst die Syntax:

EOMONTH ( start_date [, month_to_add ] )

Wobei start_date ist das Datum, für das Sie den letzten Tag des Monats finden möchten, und month_to_add ist, wie viele Monate (falls vorhanden) Sie zum Startdatum hinzufügen möchten.

Der EOMONTH() Funktion gibt einen Wert im Datum zurück Datentyp.

Beispiel 1

Hier ist ein einfaches Beispiel, um zu demonstrieren, wie es funktioniert:

SELECT EOMONTH( '2025-01-01' ) AS Result;

Ergebnis:

+------------+
| Result     |
|------------|
| 2025-01-31 |
+------------+

In diesem Fall ist unser Startmonat der Januar, daher zeigt uns das Ergebnis, dass der letzte Tag im Januar der 31. ist.

Beispiel 2 – Monat hinzufügen

Hier ist ein Beispiel für die Verwendung eines zweiten Arguments, um anzugeben, wie viele Monate hinzugefügt werden sollen. In diesem Fall füge ich dem Startdatum einen Monat hinzu:

SELECT EOMONTH( '2025-01-01', 1 ) AS Result;

Ergebnis:

+------------+
| Result     |
|------------|
| 2025-02-28 |
+------------+

Und das Ergebnis zeigt uns den letzten Februartag. Das liegt daran, dass wir zum Startdatum einen Monat hinzugefügt haben.

Beispiel 3 – Subtrahieren Sie einen Monat

Sie können eine negative Zahl verwenden, um einen oder mehrere Monate vom Startdatum abzuziehen. So:

SELECT EOMONTH( '2025-01-01', -1 ) AS Result;

Ergebnis:

+------------+
| Result     |
|------------|
| 2024-12-31 |
+------------+

Beispiel 4 – Verwenden des Systemdatums

Hier ist ein Beispiel, wie man das Ende des Monats vom aktuellen Datum erhält:

SELECT 
    SYSDATETIME() AS 'Current Date',
    EOMONTH( SYSDATETIME() ) AS 'End of Month';

Ergebnis:

+-----------------------------+----------------+
| Current Date                | End of Month   |
|-----------------------------+----------------|
| 2018-06-04 22:53:32.7694823 | 2018-06-30     |
+-----------------------------+----------------+

Wie bereits erwähnt, der EOMONTH() Funktion gibt ihren Wert im Datum zurück Datentyp. Aus diesem Grund zeigt das Ergebnis in diesem Beispiel eine Diskrepanz zwischen der Anzeige des Startdatums und der Anzeige des Monatsendes.

In diesem Fall wird unser Startdatum mit dem SYSDATETIME() generiert -Funktion, die ihren Wert als datetime2(7) zurückgibt Datentyp. Dieser Datentyp beinhaltet die Zeitkomponente sowie das Datum. Das Datum Der Datentyp enthält nur die Datumskomponente.

Sie können das Datum immer mit FORMAT() formatieren Funktion oder verwenden Sie verschiedene andere TSQL-Funktionen, um verschiedene Teile des Datums zu extrahieren.

Beispiel 5 – Countdown bis zum Monatsende

Sie können auch EOMONTH() kombinieren Funktion mit anderen Funktionen, um ein gewünschtes Ergebnis zu erzielen.

Hier ist ein Beispiel, das die Anzahl der Tage, Stunden, Minuten und Sekunden bis zum Ende des Monats zurückgibt:

SELECT 
    FORMAT(SYSDATETIME(), 'dd MMMM') AS 'Current Date',
    FORMAT(EOMONTH( SYSDATETIME() ), 'dd MMMM') AS 'EOM',
    DATEDIFF(day, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Days',
    DATEDIFF(hour, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Hours',
    DATEDIFF(minute, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Minutes',
    DATEDIFF(second, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Seconds';

Ergebnis:

+----------------+---------+--------+---------+-----------+-----------+
| Current Date   | EOM     | Days   | Hours   | Minutes   | Seconds   |
|----------------+---------+--------+---------+-----------+-----------|
| 04 June        | 30 June | 26     | 601     | 36055     | 2163252   |
+----------------+---------+--------+---------+-----------+-----------+