Використання функцій МІСЯЦЬ та РІК, як пропонується у більшості відповідей, має той недолік, що SQL Server не зможе використовувати будь-який індекс, який може бути у стовпці вашої дати. Це може знищити продуктивність на великому столі.
Я був би схильний передати значення DATETIME (наприклад, @StartDate) до збереженої процедури, яка представляє перший день місяця, який вас цікавить.
Потім можна використовувати
SELECT ... FROM ...
WHERE DateColumn >= @StartDate
AND DateColumn < DATEADD(month, 1, @StartDate)
Якщо вам потрібно передати місяць і рік як окремі параметри до збереженої процедури, ви можете створити DATETIME, що представляє перший день місяця, використовуючи CAST і CONVERT, а потім виконайте дії, описані вище. Якщо ви зробите це, я б рекомендував написати функцію, яка генерує DATETIME із цілочисельних значень року, місяця, дня, наприклад, наступних даних із блогу SQL Server .
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
Потім запит стає:
SELECT ... FROM ...
WHERE DateColumn >= Date(@Year,@Month,1)
AND DateColumn < DATEADD(month, 1, Date(@Year,@Month,1))