2016-08-03 70 views
0

Ich denke, ich bin wirklich nah daran, das zu bekommen, aber ich bin nur daneben!SQL Server 2012 - Woche Datum Sa bis Freitag

Ich versuche, ein Datum zu erstellen (um zu melden), die es mir erlauben wird, jede Woche von Samstag bis Freitag auszuwählen. Nimmt man letzte Woche als Beispiel, gibt mir der folgende Code den 29/07/2016 für einen Zeitraum vom 24/07/2016 bis zum 30/07/2016, aber ich möchte, dass der Datumsbereich vom 23/07/2016 bis 29 ist/07/2016 ist das möglich?

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

Vielen Dank im Voraus!

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

Suchen Sie nach ['SET DATEFIRST'] (https://msdn.microsoft.com/en-in/library/ms181598.aspx)? – Arulkumar

Antwort

0

Dies sollte Sie geben, was Sie suchen:

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

Es wird Ihnen die folgenden Freitag für einen bestimmten Zeitpunkt. Beachten Sie, dass der Datumsteil weekday für das Gebietsschema empfindlich ist, sodass der Offset möglicherweise abhängig vom Gebietsschema angepasst werden muss. Oder Sie müssen etwas umfassenderes tun, um es länderunabhängig zu machen. SELECT @@DATEFIRST gibt Ihnen den ersten Tag der Woche in Ihrem Gebietsschema. 7 ist Sonntag. Sie könnten das bei Bedarf einbauen.

+0

Hallo - Vielen Dank für Ihre schnelle Antwort - Ich konnte nicht wirklich schaffen, was ich nach der Verwendung dieser Lösungen war (ich habe Arbeitswoche Datumsbereiche ZB 25. 31) so oben habe ich einen Mini-Datensatz erstellt, um zu veranschaulichen. Ich habe sowohl die Woche als auch das Ende der Woche gezeigt, aber es spielt keine Rolle, welcher erstellt wird (Wenn einer einfacher ist als der andere) - ich hoffe, das hilft :) – Baseline9

+0

Ahhh Ich habe es ausgearbeitet! Wie du sagst muss ich mein Gebietsschema zurücksetzen so war Fr der erste Tag der Arbeitswoche und der Offset zu - 7 so nahm es Wochenende (Jeden Freitag) an - Danke euch allen für eure Hilfe :) Es ist immer das selbe ich hatte alles geschrieben von den komplizierten Bits des Codes war es nur diese letzte Hürde, die ich überwinden musste! – Baseline9

0
  • Beginn der Strecke: DATEADD(DAY, 6 - DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

  • Ende Strecke: DATEADD(DAY, -1 * DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

Happy Coding