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

3 Möglichkeiten, den ersten Tag des Monats in SQL Server zu erhalten

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 .