Die Verwendung der in den meisten Antworten vorgeschlagenen Funktionen MONTH und YEAR hat den Nachteil, dass SQL Server keinen Index für Ihre Datumsspalte verwenden kann. Dies kann die Leistung auf einem großen Tisch beeinträchtigen.
Ich würde gerne einen DATETIME-Wert (z. B. @StartDate) an die gespeicherte Prozedur übergeben, die den ersten Tag des Monats darstellt, an dem Sie interessiert sind.
Sie können dann verwenden
SELECT ... FROM ...
WHERE DateColumn >= @StartDate
AND DateColumn < DATEADD(month, 1, @StartDate)
Wenn Sie den Monat und das Jahr als separate Parameter an die gespeicherte Prozedur übergeben müssen, können Sie mit CAST und CONVERT eine DATETIME generieren, die den ersten Tag des Monats darstellt. Gehen Sie dann wie oben vor. Wenn Sie dies tun, würde ich empfehlen, eine Funktion zu schreiben, die eine DATETIME aus ganzzahligen Werten für Jahr, Monat und Tag generiert, z. B. die folgenden aus einem SQL Server-Blog .
create function Date(@Year int, @Month int, @Day int)
returns datetime
as
begin
return dateadd(month,((@Year-1900)*12)+@Month-1,@Day-1)
end
go
Die Abfrage lautet dann:
SELECT ... FROM ...
WHERE DateColumn >= Date(@Year,@Month,1)
AND DateColumn < DATEADD(month, 1, Date(@Year,@Month,1))