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中以星期一为每周第一天 计算周数相关推荐

  1. SQL Server中常用全局变量介绍

    在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ...

  2. 消除SQL Server中重要维护任务的风险

    As database professionals, we are often in very close proximity to important processes, data, and ap ...

  3. Sql Server中判断日志是否为一个星期

    1.引出问题 SQL Server中默认将星期天做为一个星期的第一天,如果你查询以下语句: select Datediff(week,'2010/12/12','2010/12/13') 2010/1 ...

  4. SQL Server中的数据字典

    数据字典是记录了数据库的系统描述信息的表和视图的集合,分为两类 系统自带:DBMS自带的,用于统计数据库中的相应信息.在SQL Server 数据库中的sys*表,里面记录着系统字段的定义.索引.完整 ...

  5. predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析

    SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致 ...

  6. SQL SERVER中什么情况会导致索引查找变成索引扫描

    原文:SQL SERVER中什么情况会导致索引查找变成索引扫描 SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方 ...

  7. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  8. 十步优化SQL Server中的数据访问

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  9. 在SQL Server中分页结果的最佳方法是什么

    如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...

  10. SQL Server中的char,nchar,varchar和nvarchar有什么区别?

    nvarchar是什么意思? SQL Server中的char , nchar , varchar和nvarchar什么区别? #1楼 char :固定长度的字符数据,最大长度为8000个字符. nc ...

最新文章

  1. python | np.eye()函数
  2. 凯撒(Caesar)密码加密解密c语言
  3. ASP.NET Core 中间件的几种实现方式
  4. java rhino 运行 js_Mozilla Rhino :如何从Java调用JS函数
  5. RMAN备份与还原 - 参考案例
  6. oracle vm突然黑屏了
  7. php如何判断是否为json数据(格式)
  8. 一本通1628X-factor Chain
  9. android手机切换手写输入法,安卓搜狗输入法手写输入切换怎么设置
  10. 安服工程师的岗位职责
  11. pdf拆分成多个文件,方法步骤
  12. element-UI中分页组件显示英文的解决方案
  13. 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?递归函数解决
  14. 淘宝店铺介绍范文如何写的技巧详细分析!
  15. 唱歌气沉丹田怎么做 气沉丹田的口诀
  16. 拓扑图绘制工具开源_3个用于绘制家谱的开源家谱工具
  17. python 换脸 github_AI 换脸项目 ALAE 登顶 Github,AI 换脸又升级?
  18. 彩云小译怎么翻译网页_彩云小译插件,中英双语对照网页翻译,支持视频字幕翻译...
  19. 《类型和程序设计语言》
  20. 数字电子时钟的设计与实现

热门文章

  1. 软件架构师的12项修炼[2]——关系技能修炼(2)——领导力、政治
  2. 【Linux】Linux安装搜狗输入法
  3. 网易 html5,今天网易刷屏的这个H5,到底有多猛?
  4. 跳转指定位置(HTML)
  5. 推荐几款不错的Chrome 插件
  6. linux无桌面浏览器,Ubuntu无桌面进行Web浏览器测试
  7. UE编辑器格式化SQL
  8. pdf转cad怎么弄_CAD转PDF怎么弄?在线老师傅教你一招
  9. 铃声文本串转二进制串的问题(midi)
  10. C语言开发七彩连珠游戏,七彩连珠游戏介绍 七彩连珠单机版运行及玩法介绍