当心:正确的周计算通常比您想象的要复杂!
如果您使用Datepart(week, aDate)
“周”这个概念,您会做出很多假设。一周是从周日还是周一开始?您如何处理第 1 周和第 5 周之间的过渡。一年中的实际周数取决于您使用的周计算规则(first4dayweek、weekOfJan1 等)
如果您只是想处理差异,您可以使用
DATEDIFF('s', firstDateTime, secondDateTime) > (7 * 86400 * numberOfWeeks)
如果第一个 dateTime 是在,2011-01-01 15:43:22
那么差异是 5 周后2011-02-05 15:43:22
编辑:实际上,根据这篇文章:Wrong week number using DATEPART in SQL Server
您现在可以用来Datepart(isoww, aDate)
获取 ISO 8601 周数。我知道那week
是坏的,但不知道现在有修复。凉爽的!
如果您将星期一用作一周的第一天,则此方法有效
set language = british
select datepart(ww, @endofMonthDate) -
datepart(ww, @startofMonthDate) + 1
- Datepart 是语言敏感的。通过为
british
您设置语言,使星期一成为一周的第一天。
- 这将返回 2010 年 2 月和 2012 年 6 月的正确值!(因为星期一而不是星期日是一周的第一天)。
- 它似乎也返回了 1 月和 12 月的正确周数(无论年份如何)。该
isoww
参数使用星期一作为一周的第一天,但它会导致 1 月有时在 52/53 周开始,而 12 月有时在第 1 周结束(这会使您的选择语句更复杂)