-
[SQL Server]按照设定的周别的第一天算任意一天的周别
业务上有需求要按周五作为一周的第一天算周别,所以就研究了一个SQL Server算法。
备注:1月1号一定是第一周的开始,且到周设定的最后一天作为第一周的最后一天。WEEKDAY为SQL默认的周天为每周第一天
例如:周五当周别第一天,1月1号是周三,那么第一周的就是1月1号-1月2号,1月3号算第二周
特别说明:虽然我个人测试过多种情况,但是还是请大家使用的时候注意做好测试验证,出现算法错误引发的后果,本人概不负责
注意事项:有类似的需求的时候,千万不要使用SQL自带的功能SET DATEFIRST来调整SQL默认的周别第一天,这个是全局设置,调整后之前数据库中已经存在算法可能就全错了
算法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
--@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),转载请注明原文链接:https://www.cnblogs.com/stupidsheep/articles/16722618.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式