sql-server-2005 – SQL Server 2005中的Isoweek

前端之家收集整理的这篇文章主要介绍了sql-server-2005 – SQL Server 2005中的Isoweek前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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;

猜你在找的MsSQL相关文章