有一个 datepart iso_week 返回选定日期的 iso_week。
选择日期(iso_week,getdate())
这将返回周电流的欧洲标准。它与一周不同。
棘手的部分来了:
SELECT DATEPART(iso_week, '2011-01-01')
退货
52
所以它属于去年为了按年和iso_week分组,我需要考虑iso_week不是来自同一年。
Iso_week 从星期一开始,属于大多数日子重叠的年份。所以 2010 年有 4 天,2011 年有 3 天,一周是 52 天,所有天都属于 iso_year 2010。但是 TSQL 没有 detepart iso_year。
declare @t table(col1 datetime)
insert @t
ALL SELECT '2010-12-28'
UNION ALL SELECT '2010-12-29'
UNION ALL SELECT '2010-12-30'
UNION ALL SELECT '2010-12-31'
UNION ALL SELECT '2011-01-01'
UNION ALL SELECT '2011-01-02'
--UNION ALL SELECT '2011-01-03' Stackexchange is bugged and can't handle this line showing 53
UNION ALL SELECT '2011-01-04'
我需要类似的东西(iso_year 不存在):
SELECT DATEPART(ISO_WEEK, col1) WEEK, DATEPART(iso_YEAR, col1) YEAR, COUNT(*) COUNT
FROM @t
GROUP BY DATEPART(ISO_WEEK, col1), DATEPART(iso_YEAR, col1)
ORDER BY 2,1
预期结果
WEEK YEAR COUNT
52 2010 6
1 2011 2