DATEPART(week, DateField)
даст вам неделю года, которая будет соответствовать вашим критериям. Неделя месяца не является хорошим критерием для использования, поскольку она очень аморфна.
Вы можете получить неделю года для первого числа месяца, вернув DATEPART(week, '7/1/2011')
или что-то еще, что даст вам отправную точку.
EDIT:
Для ваших дополнительных критериев из комментариев:
SELECT <fields>
FROM MyTable
WHERE YEAR(DateField) = 2011
AND DATEPART(week, Datefield) BETWEEN
DATEPART(week, '6/1/2011') AND DATEPART(week, (DATEADD(DAY, -1, (DATEADD(Month, 1, '6/1/2011')))))
Возможно, вы захотите проверить количество закрывающих скобок, но в основном это говорит:
- Год 2011
- Неделя с 6 июня 2011 года по неделю от 30 июня 2011 года
Дополнительные расчеты даты должны быть получены до 01.07.2011 (месяц +1), а затем - до 30.06.2011. Альтернативой является жесткое кодирование разрывов дат для каждого месяца. Таким образом, вы также можете параметризировать даты и объединять как
CAST(@Month + '/1/' + @Year as smalldatetime)