在sql Server 2008中,isoweek可以找到:
SELECT datepart(iso_week,getdate())
在sql Server 2008之前,没有内置函数来查找isoweek.
我一直在搜索高低的语法来找到sql Server 2005的用户定义的iso_week.我发现了很多解决方案.不喜欢我发现的任何解决方案,其中大多数没有工作,而且他们太久了.
由于问题很旧,我期望这个问题已经耗尽,并且找到了最好的解决方案.我无法找到一个好的方法.
我写了一个解决方案,我稍后再发贴.但在我做之前,我想确保没有人能匹配我写的解决方案.
我希望赚取自学习者的徽章.我敦促人们为这个古老的问题找到最好的答案.
在给人们找到一个很好的解决方案的机会之后,我将发布我的答案.
解决方法
这是一个类似于你的方法,它也依赖于本周的星期四.但最终它使用的日期不同.
>获取(ISO)周的星期四的日期.
您自己的解决方案使用已知星期四的硬编码日期.或者,本周的星期四可以在@@ DATEFIRST的帮助下找到:
SELECT Th = DATEADD(DAY,3 - (DATEPART(WEEKDAY,@date) + @@DATEFIRST - 2) % 7,@date)
(我没有为正确的配方挣扎太多,因为对我而言是already known)
获取星期四的一天:
SELECT DY = DATEPART(DAYOFYEAR,Th)
>用这个号码找出这样的一周:
SELECT ISOWeek = (DY - 1) / 7 + 1
以下是单个语句中的以上计算:
SELECT ISOWeek = (DATEPART(DAYOFYEAR,Th) - 1) / 7 + 1 FROM ( SELECT Th = DATEADD(DAY,@date) ) s;