Ага, в какой день начинается неделя? Воскресенье или понедельник?
datepart (dw, date) возвращает день недели (от 1 до 7), но «[t] число, полученное с помощью datepart для дня недели, зависит от значения, установленного SET DATEFIRST, который устанавливает первый день недели».
Но он вернет правильную вещь, если ваша база данных настроена правильно.
Хорошо, если он возвращает 1, мы в первый день или, в более общем смысле, первый день
1 - datepart (dw, date) дней до нашей даты
Если он возвращает 7, мы находимся в последнем дне недели или, в более общем смысле, последний день
7 - datepart (dw, date) дней после нашей даты
Мы используем dateadd (dd, n, date), чтобы получить дату через 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 ;
дает нам то, что нам нужно.
Обратите внимание, что первый день первой недели года приходится на ночь в предыдущем календарном году, потому что по определению неделя начинается в (воскресенье, понедельник или что-то еще, что вы указали), но год может начинаться в любой день. недели. Точно так же последний день последней недели года может быть в следующем календарном году.
person
tpdi
schedule
03.04.2009