Наиболее эффективным является создание начальной и конечной даты требуемого диапазона, чтобы вы сравнивали даты как одно значение, а не извлекали свойства года и месяца из каждой даты.
Пример:
select SomeField
from SomeTable
where SomeDate >= ? and SomeDate < ?
(Обратите внимание, что первое сравнение включительно, а индекс - эксклюзив.)
Создать дату начала и окончания для использования в качестве параметров: (пример в C #)
DateTime start = new DateTime(date.Year, date.Month, 1)
DateTIme end = start.AddMonths(1);