Да, в какой день начинается неделя? Воскресенье или понедельник?
datepart (dw, date) возвращает день недели (от 1 до 7), но «[t] число, произведенное в день недели, зависит от значения, установленного SET DATEFIRST, которое устанавливает первый день неделю."
Но это вернет правильную вещь, если ваша база данных правильно настроена.
OK, если она возвращает 1, мы в первый день, или в более общем плане, то первый день
1 - DatePart (с.в., дата) дней до нашей даты
Если она возвращает 7 мы в последний день недели, или в более общем плане, в последний день
7 - DatePart (с.в., дата) дней после нашей даты
мы используем DateAdd (дд, п, дата) чтобы получить дату n дней с нашей даты, так:
select
date_column,
datepart(wk, date_column) as week_number,
dateadd(dd, 1 - datepart(dw, date_column),date_column) as week_start,
dateadd(dd, 7 - datepart(dw, date_column), date_column) as week_end
from table ;
дает нам то, в чем мы нуждаемся.
Обратите внимание, что первый день первой недели года должен быть в предыдущем календарном году, потому что по определению начинается неделя (воскресенье или понедельник или что бы вы ни выбрали), но год может начать в любой день недели. Аналогичным образом, последний день последней недели года может быть в следующем календарном году.
Маленький Крис выиграл! Большое спасибо. Отлично работает. – 2009-04-03 21:02:45