如果我将2011年作为年份通过,我必须将YEAR WEEKNUMBER STARTDATE ENDDATE
值插入数据表(例如weekrange
)。
周范围从2011-03-28
到2011-04-03
开始(因为我的数据库2010上周范围以2011-03-27
结尾)
像这样,我必须生成52周。
我想编写一个存储过程,只需要year作为参数。今年我必须生成周范围并插入我的表格中,如上所示。
我该怎么做?
此致 jn
答案 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关键字的列。