Im Folgenden finden Sie drei Optionen für die Verwendung von T-SQL zur Rückgabe des ersten Tages des Monats in SQL Server.
Dies kann der erste Tag des aktuellen Monats oder der erste Tag eines Monats sein, basierend auf einem bestimmten Datum.
Möglichkeit 1
Eine Möglichkeit, dies zu tun, ist wie folgt:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Ergebnis:
2035-10-01
Dazu müssen einige T-SQL-Funktionen verwendet werden, um eine Datumsverschiebung durchzuführen, um das Datum auf den Monatsanfang zurückzusetzen.
Weitere Informationen zu DATEADD()
und DAY()
Funktionen, siehe DATEADD()
Beispiele in SQL Server und DAY()
Beispiele in SQL Server.
Option 2
Hier ist eine weitere Option, um den ersten Tag des Monats zu erhalten:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Ergebnis:
2035-10-01 00:00:00.000
Hier haben wir das DATEDIFF()
eingebaut Funktion in unsere Berechnung.
Obwohl wir die Anfangsvariable als date
deklariert haben -Wert ist das Ergebnis ein datetime
Wert. Wir können CONVERT()
verwenden oder CAST()
um das Ergebnis in ein date
umzuwandeln Wert:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);
Ergebnis:
2035-10-01
Möglichkeit 3
Hier ist eine weitere Option:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Ergebnis:
2035-10-01 00:00:00.000
Ähnlich wie bei Option 2 ist das Ergebnis ein datetime
Wert, aber dieses Mal liegt es daran, dass wir die Variable als datetime
deklariert haben Wert. Wir können es jedoch genauso behandeln, um es in ein date
umzuwandeln Wert:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Ergebnis:
2035-10-01
Der Grund, warum wir die Variable nicht als date
deklariert haben value ist, weil dies zu einem Fehler führen würde:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Ergebnis:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
Das liegt daran, dass wir versuchen, eine ganze Zahl zu einem date
hinzuzufügen Wert, der nicht funktioniert. Hinzufügen einer ganzen Zahl zu einem datetime
value funktioniert, und deshalb haben wir die Variable als datetime
deklariert .