Следующие данные будут генерировать необходимые данные на основе определения номера недели сервера SQL (см. Примечания по DATEPART(ww,...)
здесь ).Обратите внимание, что это будет означать, что у некоторых лет есть 53 недели.
DECLARE @year AS CHAR(4)
SET @year = '2011'
DECLARE @firstDay DATETIME
SET @firstDay = CAST(@year + '0101' AS DATETIME)
;WITH dayCTE
AS
(
SELECT DATEADD(dd,ROW_NUMBER() OVER (ORDER BY name) - 1, @firstDay) AS yearday
FROM master.dbo.spt_values
)
,weekCTE
AS
(
SELECT yearday,
DATEPART(WW,yearday) AS weekno
FROM dayCTE
WHERE YEAR(yearday) = @year
)
SELECT @year AS [YEAR],
weekno AS WEEKNUMBER,
MIN(yearday) AS STARTDATE,
MAX(yearday) AS ENDDATE
FROM weekCTE
GROUP BY weekno
ORDER BY weekno
Это побочный вопрос, но я бы рекомендовал переименовать столбец YEAR
вашей целевой таблицы во что-то, что не является T-SQLключевое слово.