![](/img/trans.png)
[英]Set first week of the year from the first day of the year until the following monday
[英]Set week number based on first Monday of Year
我需要设置表格从第一天到第一个星期一到下一个星期一的星期数,依此类推。 我可以轻松地获得一年的第一个日和第一个星期一,但是我不知道如何从第一个星期一起每隔7天增加一次通过表格的时间,因此我可以设置周数。
我有这样的事情:
UPDATE table
SET weeknumberofyear = @WeekNumber + 1
WHERE datefield = DATEADD(Day,7,(SELECT DATEADD(DAY, (@@DATEFIRST - DATEPART(WEEKDAY, @Date) + (8 - @@DATEFIRST) * 2) % 7, @Date)))
由于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
我不确定所有有关“星期一”的话题是什么意思,但是如果您希望从日期中获取星期数,则可以执行以下操作:
UPDATE table
SET weeknumberofyear = DATEPART(wk, datefield)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.