SQL Server中以星期一为每周第一天 计算周数
SQLServer中以星期一为每周第一天 计算周数,但是在网上搜了,看了一些,比如如下的文章:
把星期一作为每个星期的开始在一年中求取周数
写的都挺复杂,一堆的sql代码,但是实际运行了一下,都是不对的。。。
比如下面是摘自网上的代码:
DECLARE @DATE DATETIME = '2012-01-29'
DECLARE @FIRST_DATE_OF_YEAR DATETIME = DATEADD(YYYY, DATEDIFF(YYYY, 0, @DATE),0) SELECT DATEPART(WEEK, @DATE) , -- 一年中的周数,默认以周日开始 DATEADD(WK, DATEDIFF(WK, 0, @DATE), 0) , -- 当前周的周一,默认从周日开始,但是仍然找周一 DATEADD(DAY, -1, DATEADD(WK, DATEDIFF(WK, 0, @DATE), 0)) , -- 当前周先找周一,然后往前一天找到周日 DATEDIFF(DAYOFYEAR, @FIRST_DATE_OF_YEAR,DATEADD(DAY, -1, DATEADD(WK, DATEDIFF(WK, 0, @DATE), 0))) , -- 当前天离年第一天的间隔 DATEDIFF(DAYOFYEAR, @FIRST_DATE_OF_YEAR,DATEADD(DAY, -1, DATEADD(WK, DATEDIFF(WK, 0, @DATE), 0))) / 7 + 1 -- 按天计算的周数
经过验证,发现写的是有问题的。。。
由于急着要用,就想怎么用简单的方法,就能算出来呢?
下面这个是简单的方法:
SELECT GETDATE() AS THEDAY,case when datepart(weekday,getdate()) in (2,3,4,5,6,7) then DATEPART(WEEK,GETDATE())else DATEPART(WEEK,GETDATE()) -1 end AS WEEKS
/*
THEDAY WEEKS
2017-03-15 10:55:12.193 11
*/
考虑到周日可能是一年的第一天,所以改成这样:
select getdate() as today,case when datepart(weekday,getdate()) in (2,3,4,5,6,7) and DATEPART(WEEKday,datename(year,getdate())+'-01-01') = 1 then datepart(week,getdate()) +1when datepart(weekday,getdate()) =1 and DATEPART(WEEKday,datename(year,getdate())+'-01-01') = 1 then datepart(week,getdate()) when datepart(weekday,getdate()) in (2,3,4,5,6,7) then datepart(week,getdate()) else datepart(week,getdate()) -1 end as week
/*
today week
2017-03-15 10:55:53.507
*/
SQL Server中以星期一为每周第一天 计算周数相关推荐
- SQL Server中常用全局变量介绍
在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ...
- 消除SQL Server中重要维护任务的风险
As database professionals, we are often in very close proximity to important processes, data, and ap ...
- Sql Server中判断日志是否为一个星期
1.引出问题 SQL Server中默认将星期天做为一个星期的第一天,如果你查询以下语句: select Datediff(week,'2010/12/12','2010/12/13') 2010/1 ...
- SQL Server中的数据字典
数据字典是记录了数据库的系统描述信息的表和视图的集合,分为两类 系统自带:DBMS自带的,用于统计数据库中的相应信息.在SQL Server 数据库中的sys*表,里面记录着系统字段的定义.索引.完整 ...
- predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析
SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致 ...
- SQL SERVER中什么情况会导致索引查找变成索引扫描
原文:SQL SERVER中什么情况会导致索引查找变成索引扫描 SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方 ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- 十步优化SQL Server中的数据访问
故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...
- 在SQL Server中分页结果的最佳方法是什么
如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...
- SQL Server中的char,nchar,varchar和nvarchar有什么区别?
nvarchar是什么意思? SQL Server中的char , nchar , varchar和nvarchar什么区别? #1楼 char :固定长度的字符数据,最大长度为8000个字符. nc ...
最新文章
- python | np.eye()函数
- 凯撒(Caesar)密码加密解密c语言
- ASP.NET Core 中间件的几种实现方式
- java rhino 运行 js_Mozilla Rhino :如何从Java调用JS函数
- RMAN备份与还原 - 参考案例
- oracle vm突然黑屏了
- php如何判断是否为json数据(格式)
- 一本通1628X-factor Chain
- android手机切换手写输入法,安卓搜狗输入法手写输入切换怎么设置
- 安服工程师的岗位职责
- pdf拆分成多个文件,方法步骤
- element-UI中分页组件显示英文的解决方案
- 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?递归函数解决
- 淘宝店铺介绍范文如何写的技巧详细分析!
- 唱歌气沉丹田怎么做 气沉丹田的口诀
- 拓扑图绘制工具开源_3个用于绘制家谱的开源家谱工具
- python 换脸 github_AI 换脸项目 ALAE 登顶 Github,AI 换脸又升级?
- 彩云小译怎么翻译网页_彩云小译插件,中英双语对照网页翻译,支持视频字幕翻译...
- 《类型和程序设计语言》
- 数字电子时钟的设计与实现