我需要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