大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说excel以周为单位计算指定日期为第一周_sql查询当前时间前一天的数据,希望您对编程的造诣更进一步.
业务上有需求要按周五作为一周的第一天算周别,所以就研究了一个SQL Server算法。
备注:1月1号一定是第一周的开始,且到周设定的最后一天作为第一周的最后一天。WEEKDAY为SQL默认的周天为每周第一天
例如:周五当周别第一天,1月1号是周三,那么第一周的就是1月1号-1月2号,1月3号算第二周
特别说明:虽然我个人测试过多种情况,但是还是请大家使用的时候注意做好测试验证,出现算法错误引发的后果,本人概不负责
注意事项:有类似的需求的时候,千万不要使用SQL自带的功能SET DATEFIRST来调整SQL默认的周别第一天,这个是全局设置,调整后之前数据库中已经存在算法可能就全错了
算法:
--@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 THEN DATEDIFF(DAY,DATEADD(DAY,ABS(@diff),DATENAME(YEAR,@d)+"-01-01"),@d)/7+1 ELSE DATEDIFF(DAY,DATEADD(DAY,ABS(@diff),DATENAME(YEAR,@d)+"-01-01"),@d)/7+1+1 END WHEN @diff IN (1,2,3,4,5,6,7) THEN CASE WHEN DATEDIFF(DAY,DATEADD(DAY,7-@diff,DATENAME(YEAR,@d)+"-01-01"),@d)<0 THEN DATEDIFF(DAY,DATEADD(DAY,7-@diff,DATENAME(YEAR,@d)+"-01-01"),@d)/7+1 ELSE DATEDIFF(DAY,DATEADD(DAY,7-@diff,DATENAME(YEAR,@d)+"-01-01"),@d)/7+1+1 END END
思路:
本文来自思创斯聊编程,作者:二洋 – 思创斯聊编程 (cnblogs.com),转载请注明原文链接:[SQL Server]按照设定的周别的第一天算任意一天的周别 – 二洋 – 思创斯聊编程 (cnblogs.com)
本文版权归作者和思创斯聊编程共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
原文地址:https://www.cnblogs.com/stupidsheep/archive/2022/09/23/16722618.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4733.html