我需要设置从第一天到第一个星期一到下一个星期一的表的周数,依此类推。我可以很容易地获得第一天和一年的第一个星期一,但我不知道如何从第一个星期一开始每隔7天增加一次,以便我可以设置周数。
我有这样的事情:
UPDATE table
SET weeknumberofyear = @WeekNumber + 1
WHERE datefield = DATEADD(Day,7,(SELECT DATEADD(DAY, (@@DATEFIRST - DATEPART(WEEKDAY, @Date) + (8 - @@DATEFIRST) * 2) % 7, @Date)))
答案 0 :(得分:3)
由于datepart(week,datefield)
函数根据星期日作为一周的第一天获得周数,所以您只需检查datepart(weekday,datefield)
以及它是1(星期日)还是2(星期一) ,从datepart(week,datefield)
函数中减去1:
update table
set weeknumberofyear = datepart(week,datefield) -
case when datepart(weekday,datefield) in(1,2) then 1 else 0 end
编辑这并不代表星期日或星期一是一年中的第一天。在这些情况下,weeknumberofyear
得到0。要解决此问题,请对表执行第二次更新。即使这需要两次更新,我仍然认为它比循环遍历所有记录更有效。
update table
set weeknumberoftheyear = weeknumberoftheyear + 1
where year(datefield) in(
select distinct year(datefield)
from table
where weeknumberoftheyear = 0
)
编辑 WeekNumberOfTheMonth更新 - 现在我们有了WeekNumberOfTheYear值,我们可以在该字段上使用排名函数来更新WeekNumberOfTheMonth列而不进行任何递归。
update t
set t.weeknumberofthemonth = u.weeknumberofthemonth
from table t
inner join (
select distinct weeknumberoftheyear,
dense_rank() over(partition by month(datefield)
order by weeknumberoftheyear) weeknumberofthemonth
from table ) u
on u.weeknumberofyear = t.weeknumberofyear
答案 1 :(得分:0)
我不确定所有关于“星期一”的谈话是什么意思,但是如果你想要从某个约会那里获得周数,你可以这样做:
UPDATE table
SET weeknumberofyear = DATEPART(wk, datefield)