Yanıtların çoğunda önerildiği gibi AY ve YIL işlevlerini kullanmak, SQL Server'ın tarih sütununuzda olabilecek herhangi bir dizini kullanamaması dezavantajına sahiptir. Bu, büyük bir masadaki performansı öldürebilir.
İlgilendiğiniz ayın ilk gününü temsil eden saklı yordama bir DATETIME değeri (örn. @StartDate) iletme eğilimindeyim.
Daha sonra kullanabilirsiniz
SELECT ... FROM ...
WHERE DateColumn >= @StartDate
AND DateColumn < DATEADD(month, 1, @StartDate)
Ayı ve yılı saklı yordama ayrı parametreler olarak geçirmeniz gerekiyorsa, CAST ve CONVERT kullanarak ayın ilk gününü temsil eden bir DATETIME oluşturabilir ve ardından yukarıdaki gibi devam edebilirsiniz. Bunu yaparsanız, tamsayı yıl, ay, gün değerlerinden bir DATETIME oluşturan bir işlev yazmanızı tavsiye ederim, örneğin bir SQL Server blogundan aşağıdaki gibi .
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
Ardından sorgu şu hale gelir:
SELECT ... FROM ...
WHERE DateColumn >= Date(@Year,@Month,1)
AND DateColumn < DATEADD(month, 1, Date(@Year,@Month,1))