如何在SQL Server 2005中生成一年的周范围?

时间:2011-03-22 06:43:45

标签: sql-server-2005

如果我将2011年作为年份通过,我必须将YEAR WEEKNUMBER STARTDATE ENDDATE值插入数据表(例如weekrange)。

周范围从2011-03-282011-04-03开始(因为我的数据库2010上周范围以2011-03-27结尾)

像这样,我必须生成52周。

我想编写一个存储过程,只需要year作为参数。今年我必须生成周范围并插入我的表格中,如上所示。

我该怎么做?

此致 jn

1 个答案:

答案 0 :(得分:0)

以下内容将根据SQL Server的周数定义生成所需的数据(请参阅DATEPART(ww,...) here上的说明)。请注意,这意味着有些年份有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关键字的列。