2016-03-29 70 views
1

我有帶日期列的表。我想插入整數:從第一個星期一到星期日1,從第二個星期一到星期日2等...增量插入到SQL列中

我該如何在SQL服務器中執行此操作?

預期輸出:

03/14/16 1 
03/15/16 1 
03/16/16 1 
03/17/16 1 
03/18/16 1 
03/19/16 1 
03/20/16 1 
03/21/16 2 
03/22/16 2 
03/23/16 2 
03/24/16 2 
03/25/16 2 
03/26/16 2 
03/27/16 2 
03/28/16 3 
03/29/16 3 
03/30/16 3 
03/31/16 3 
04/01/16 3 
04/02/16 3 
04/03/16 3 
04/04/16 4 
+2

你到目前爲止嘗試了什麼? – Pred

+0

我有日期列,但第二列我不知道如何獲得該值。 – Jack

+0

http://mattgemmell.com/what-have-you-tried/ – Pred

回答

2

試試這個

SELECT DENSE_RANK() OVER(ORDER BY DATEPART(YEAR,[date column]) 
,DATEPART(WEEK,[date column])) FROM table 
+0

謝謝阿卜杜勒,它只給我行號。 – Jack

+0

您是否使用** PARATTION BY DATEPART(WEEK,[日期欄])**? –

+0

是的,但這是不正確的輸出 – Jack

1

做一樣DENSE_RANK

的另一種方式,您可能還需要SET DATEFIRST 1如果區域不具備週一一週中的第一天。

SELECT 
MyDate, 
DATENAME(WEEKDAY, MyDate), 
(DATEPART(WEEK, MyDate) - DATEPART(WEEK,MIN(MyDate) OVER (ORDER BY MyDate))) 
+ ((DATEPART(YEAR, MyDate) - DATEPART(YEAR,MIN(MyDate) OVER (ORDER BY MyDate))) *52) + 1 MyWeek 
FROM MyData 

MyDate         MyWeek 
---------- ------------------------------ ----------- 
2015-12-26 Saturday      1 
2015-12-27 Sunday       1 
2015-12-28 Monday       2 
2015-12-29 Tuesday      2 
2015-12-30 Wednesday      2 
2015-12-31 Thursday      2 
2016-01-01 Friday       2 
2016-01-02 Saturday      2 
2016-01-03 Sunday       2 
2016-01-04 Monday       3 
2016-01-05 Tuesday      3 

編輯修復一年交叉

編輯2真正解決一年道口,每個星期一的增量計數器(例如,如果第一次約會是週中),見示例數據。

+0

它的工作原理,但經過年份更改後,它將顯示負值。 – Jack

+0

@jack fixed(我認爲:)) –

+0

不,我的代碼有問題。 – Jack

1
DECLARE @start DATE = '2016-03-14' 

;WITH cte AS (
SELECT @start as [d], 
     1 as [w] 
UNION ALL 
SELECT DATEADD(day,1,[d]), 
     CASE WHEN DATEPART(WEEK,[d]) != DATEPART(WEEK,DATEADD(day,1,[d])) THEN w+1 ELSE w END 
FROM cte 
WHERE d < '2017-04-04') 


SELECT [d], [w] 
FROM cte 
OPTION (MAXRECURSION 1000) 
+0

同樣的問題,當年更改時,它顯示不同的值 – Jack

+0

@Jack現在檢查:) – gofr1

+0

是的,它可以幫助我 – Jack