2016-08-03 238 views
0

我覺得我真的很接近這個,但我只是脫穎而出!SQL Server 2012-星期日期星期六到星期五

我想創建一個日期(通過報告),這將允許我選擇每週星期六到星期五。 以上週爲例,下面的代碼給我2016年7月29日的日期範圍爲2016年7月24日至2016年7月30日,但我希望日期範圍爲23/07/2016至29/07/2016是否可能?

DATEADD(WEEK,DATEDIFF(WEEK,0,[DateCreated]),4) AS [WeekCreated] 

非常感謝提前!

Id Date Week Commencing Week Ending 
1 16/07/2016 16/07/2016 22/07/2016 
2 17/07/2016 16/07/2016 22/07/2016 
3 18/07/2016 16/07/2016 22/07/2016 
4 19/07/2016 16/07/2016 22/07/2016 
5 20/07/2016 16/07/2016 22/07/2016 
6 21/07/2016 16/07/2016 22/07/2016 
7 22/07/2016 16/07/2016 22/07/2016 
8 23/07/2016 23/07/2016 29/07/2016 
9 24/07/2016 23/07/2016 29/07/2016 
10 25/07/2016 23/07/2016 29/07/2016 
11 26/07/2016 23/07/2016 29/07/2016 
12 27/07/2016 23/07/2016 29/07/2016 
13 28/07/2016 23/07/2016 29/07/2016 
14 29/07/2016 23/07/2016 29/07/2016 
+0

您是否在尋找['SET DATEFIRST'](https://msdn.microsoft.com/en-in/library/ms181598.aspx)? – Arulkumar

回答

0

這應該給你你在找什麼:

DATEADD(DAY, 6 - DATEPART(weekday,[DateCreated]), [DateCreated]) 

它會給你的下一個週五對於任何給定的日期。請記住weekday datepart是區域設置敏感的,所以偏移量可能需要根據區域設置進行調整。或者您可能需要做更全面的事情,以使其對地區不敏感。 SELECT @@DATEFIRST會在您的語言環境中爲您提供一週中的第一天。 7日是星期天。如有必要,您可以將其納入。

+0

嗨 - 感謝您的迅速回復 - 我無法完全重新創建使用這些解決方案後的結果(我的工作週日期範圍例如25th 31st),所以我創建了一個迷你數據集來說明。我已經顯示了兩週開始和一週結束,但是創建哪一個並不重要(如果一個比另一個更容易) - 我希望這有助於:) – Baseline9

+0

Ahhh我解決了它!正如你所說,我需要重置我的區域設置,所以星期五是工作周的第一天,偏移量爲-7,所以它在週末結束(每個星期五) - 謝謝大家的幫助:)它總是和我寫的一樣代碼的複雜部分只是我需要克服的最後一道障礙! – Baseline9

0
  • 啓動範圍:DATEADD(DAY, 6 - DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

  • 範圍的結束:DATEADD(DAY, -1 * DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

快樂編碼

相關問題