我需要weeknumers的结果集,year和两个日期之间的所有星期的startdate。我需要它来匹配其他搜索结果。由于报告将跨越一年,我需要它来匹配日历。需要两个日期之间的周数列表
我们在欧洲,所以星期一开始。 我通过JDBC连接使用SQL Server。我无法使用calander表。
我遇到过各种解决方案,但没有一个只是我需要的。这是我需要的那种清单,但不知何故结果是不正确的。我找不到我的错误:
WITH mycte AS
(
SELECT DATEADD(ww, DATEDIFF(ww,0,CAST('2010-12-01' AS DATETIME)), 0) DateValue
UNION ALL
SELECT DateValue + 7
FROM mycte
WHERE DateValue + 7 < '2016-12-31'
)
SELECT DATEPART(wk, DateValue) as week, DATEPART(year, DateValue) as year, DateValue
FROM mycte
OPTION (MAXRECURSION 0);
我用过--SET DATEFIRST 1;确保星期一开始。
结果是这样的:
week year DateValue
----------- ----------- -------------------------
49 2010 2010-11-29 00:00:00.0
50 2010 2010-12-06 00:00:00.0
51 2010 2010-12-13 00:00:00.0
52 2010 2010-12-20 00:00:00.0
53 2010 2010-12-27 00:00:00.0
2 2011 2011-01-03 00:00:00.0
3 2011 2011-01-10 00:00:00.0
4 2011 2011-01-17 00:00:00.0
5 2011 2011-01-24 00:00:00.0
6 2011 2011-01-31 00:00:00.0
的问题是显而易见的。 2010年还没有53周,第一周就没了。 这也有其他年份。 2015年只有53周。
(注意:在ISO周(欧洲)有在2010年只有52个星期,看到维基:https://en.wikipedia.org/wiki/ISO_week_date)
以下71年在一个400年的周期(增加2000当前 岁) 53周(闰年,2月29日强调), 年未列出有52周:004,009,015,020,026,032,037, 043,048,054,060,065,071,076 ,082,088,093,099,105,111,116, 122,128,133,139,144,150,156,161,167,172,178,184,189, 195,201,207,212,218,224 ,229,235,240,246,252,257,263,268, 274 ,280,285,291,296303,308,314,320,325,331,336,342,348,353 ,359,364,370,376,381,387,392,398.
日期是正确的,但。 2012-12-27是星期一,2011-01-03也是。 但是在欧洲,我们总是有一整周的时间(所以总有一周的周数为1)
任何想法对第1周有什么影响,或者为什么有这么多年53(这是错误的)?
你为什么假设53周的一年是错误的? 2010年1月1日和2日被认为是在第1周内,1月3日(周日)从第2周开始。总共有53周。到2000年,共有54周。 – Siyual
好吧,除了实际的数字(eurpean的东西),我们都同意他们应该是连续的,总是有一周。所以这是错误的。我也没有任何东西,我在下面指出的@ lad2025看了iso周。所以在这个范围内,只有2015年有53周。 – Jeroen