[SQL Server]按照设定的周别的第一天算任意一天的周别

打印 上一主题 下一主题

主题 1012|帖子 1012|积分 3036

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
业务上有需求要按周五作为一周的第一天算周别,所以就研究了一个SQL Server算法。

备注:1月1号一定是第一周的开始,且到周设定的最后一天作为第一周的最后一天。WEEKDAY为SQL默认的周天为每周第一天
例如:周五当周别第一天,1月1号是周三,那么第一周的就是1月1号-1月2号,1月3号算第二周
特别说明:虽然我个人测试过多种情况,但是还是请大家使用的时候注意做好测试验证,出现算法错误引发的后果,本人概不负责
注意事项:有类似的需求的时候,千万不要使用SQL自带的功能SET DATEFIRST来调整SQL默认的周别第一天,这个是全局设置,调整后之前数据库中已经存在算法可能就全错了
算法
[code]--@i代表周几当第一天,@d代表需要判断周别的日期DECLARE @i INT=1,@d DATETIME='2022-01-03'DECLARE @diff INT=DATEPART(WEEKDAY,DATENAME(YEAR,@d)+'-01-01')-(@i+1)SELECT     CASE WHEN @diff IN (0)        THEN DATEDIFF(DAY,DATENAME(YEAR,@d)+'-01-01',@d)/7+1    WHEN @diff IN (-1,-2,-3,-4,-5,-6,-7)        THEN CASE WHEN DATEDIFF(DAY,DATEADD(DAY,ABS(@diff),DATENAME(YEAR,@d)+'-01-01'),@d)
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表