DECLARE @a DATETIME DECLARE @b DATETIME SET @a ='2014-03-18'SET @b='2014-03-23'SET DATEFIRST 1 SELECT DATEPART(week,@a),DATEPART(week,@b) /* ----------- ----------- 12 12 (1 行受影响) */
说这个跟你的区域语言设置有关,比如周日就是第一天,那么23号就会变成第13周?
这样显然不够
同一周不一定同一年
--开始时间与结束时间为日期字段,不是自己加转换.
(
DATEPART(WEEK ,开始时间-1)=DATEPART(WEEK ,结束时间-1)
and DATEPART(YEAR ,开始时间-1)=DATEPART(YEAR ,结束时间-1)
)--同一年的
OR
(
DATEPART(WEEK ,开始时间-1)=DATEPART(WEEK ,convert(varchar(4),理论开始时间,120)+'-12-31')
and DATEPART(YEAR ,结束时间-1) =1
)--隔年的 算开始时间和开始时间那年最后一天同一周,同时结束时间是第二年第一周.
OR
(
DATEPART(WEEK ,开始时间-1)=DATEPART(WEEK ,convert(varchar(4),理论开始时间,120)+'-12-31')
and DATEPART(WEEKDAY ,convert(varchar(4),理论开始时间,120)+'-12-31') <>1
and DATEPART(YEAR ,结束时间-1) =1
)
--还得再加上最后一天不是星期天