Как создать недельные диапазоны для года в SQL Server 2005? - PullRequest
1 голос
/ 22 марта 2011

Мне нужно вставить YEAR WEEKNUMBER STARTDATE ENDDATE значения в таблицу данных (скажем, weekrange), если я передам 2011 год как год.

Недельный диапазон начинается с 2011-03-28 до 2011-04-03 (потому что в моей базе данныхДиапазон 2010 на прошлой неделе заканчивается на 2011-03-27)

Таким образом, я должен генерировать за 52 недели.

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

Как я могу это сделать?

С уважением, JN

1 Ответ

0 голосов
/ 22 марта 2011

Следующие данные будут генерировать необходимые данные на основе определения номера недели сервера 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ключевое слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...