繁体   English   中英

根据年份的第一个星期一设置星期数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM