Получить первый день недели в SQL Server

Я пытаюсь сгруппировать записи по неделям, сохраняя агрегированную дату как первый день недели. Однако стандартный метод, который я использую для округления дат, похоже, не работает правильно с неделями (хотя он работает с днями, месяцами, годами, кварталами и любым другим временным интервалом, к которому я его применил).

Вот SQL :

select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0);

Это возвращает 2011-08-22 00: 00: 00.000 , то есть понедельник, а не воскресенье. Выбор @@ datefirst возвращает 7 , который является кодом для воскресенья, поэтому сервер настроен правильно, насколько мне известно.

Я могу легко обойти это, изменив приведенный выше код для:

select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1);

Но тот факт, что я должен сделать такое исключение, меня немного беспокоит. Также приношу свои извинения, если это повторяющийся вопрос. Я нашел несколько связанных вопросов, но ни один из них не касался конкретно этого аспекта.

88
задан Quick Joe Smith 23 August 2011 в 23:50
поделиться