2015-07-13 112 views
0

我正在嘗試在SQL中編寫一份報告,將7月份的第一週設置爲一年中的第一週。SQL將特定月份設置爲年份的第一個月

我想通了下面這條線來獲取週數,但它僅適用於一年。即如果我有一個日期爲明年七月份的數據,它會到53周(等等),而不是重新啓動到本週有關使用該1.

datediff(ww, DATEADD(yyyy,CAST(RIGHT(DATEPART(yy,GETDATE()),2) as INT),'7/1/2000'), 
      DATEADD(dd, 8-(DATEPART(dw, S.StartDate)), S.StartDate)) as WeekCount 
+0

你一起「7月1日」的思路思考,其餘是金融年初,即它是「第1天」的一年? –

+0

我想你會想採取移位日期的模數。換句話說,第53周將再次回到1。 –

+0

「S.StartDate」的格式是什麼? –

回答

0

什麼:

select 
     (Datepart(week, convert(datetime, 
      substring(CONVERT(VARCHAR(11),@date,6), 1, 7) + '2000')) % 27) + 1 

我真的只是剝離了一年,總是使用了一年,我知道的作品。然後,只需(MOD)獲得除以27

+0

它的作品!謝謝安東尼。仍試圖理解爲什麼最後會有(%27)和(+ 1)? – FeSQL

+0

讓我詳細說明一下:2000年1月1日,1月1日正好是27周,所以我除以這一點(因爲我們截斷了本年度基本上是2000年的日期)。餘額代表週數,即第27周實際上是第1周。瞭解? :) –

0

什麼:

SELECT 
     FLOOR(
     CASE WHEN DATEPART(MONTH, @date) >= 7 THEN 
      DATEPART(DAYOFYEAR, @date) - (DATEPART(DAYOFYEAR, DATEFROMPARTS(DATEPART(YEAR, @date), 7, 1)) - 1) 
     ELSE 
      DATEPART(DAYOFYEAR, @date) + (DATEPART(DAYOFYEAR, DATEFROMPARTS(DATEPART(YEAR, @date), 7, 1))) 
     END 
     /7) + 1