我正在尝试编写一个存储过程来检索过去X周的周数,然后将它们插入到临时表中。
到目前为止,我已经能够创建临时表并返回内容(不是很难)。但是,我的问题现在在于将最后X周的数字插入我的临时表中...我是否使用某种循环?如果是这样,我该怎么做?
请注意我不能对当前周数进行简单的减号,因为如果当前周数小于X,则可能产生负数...周数必须用{{1每次(我想)。
到目前为止我的代码看起来像这样:
DATEPART
答案 0 :(得分:1)
这样的事情?
declare @X int = 3
;with cte as (
select 0 as num
union all
select num + 1 from cte where num < @X - 1
)
select
datepart(wk, dateadd(wk, -num, getdate()))
from cte
<强> sql fiddle demo 强>
查询由两部分组成。第1部分是recursive common table expression。基本上我需要的是建立一个从0到@X - 1的数字表,如下所示:
num
0
1
2
之后,我需要计算日期,如当前日期,当前日期 - 1周,当前日期 - 2周 - 所以我使用dateadd()函数(注意减去num之前,我想减去几周)。现在我只需按datepart()函数计算周数。