例如,我正在计算SQL中特定日期的一周'2016-01-20' ( yyyy-mm-dd
) 但 SQL 返回周: 4,这是错误的,因为今年第一周从 '2016-01-04' 开始,结果必须是周: 3.
我认为这个问题是全球性的,因为 2015 年是有 53 周的一年,有什么解决方案吗?谢谢你,我很抱歉我的英语不好
在tSQL中,DATEPART()
返回基于美国和欧洲大部分地区以及英国的正确数据 看这里
但是,您可以使用SET DATEFIRST
来调整起始位置。
ISO 8601 对第 01 周的定义是包含一年中第一个星期四的一周。我正在使用系统间缓存,这显然也没有考虑到这一点。所以我用这个来解决这个问题
CASE WHEN 7-datepart(dw,dateadd(dd,1,dateadd(yy,datediff(yy,0,getdate())-1,0))) < 2
THEN datepart(wk,getdate())-1 ELSE datepart(wk,getdate()) END as WeekNum