2016-08-03 7 views
0

Я думаю, что я действительно близко к этому, но я просто не в своем роде!SQL Server 2012 - Week Date Sat To Friday

Я пытаюсь создать дату (для отчета), которая позволит мне выбирать каждую неделю с субботы по пятницу. Принимая на прошлой неделе, например, приведенный ниже код дает мне 29/07/2016 для диапазона дат от 24/07/2016 по 30/07/2016, однако мне хотелось бы, чтобы диапазон дат был 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

Привет, спасибо за ваш быстрый ответ. Я не мог полностью создать то, что было после использования этих решений (у меня были диапазоны дат рабочих дней, например, 25-й 31-й), поэтому выше я создал мини-набор данных для иллюстрации. Я показал, что обе недели начинаются и заканчиваются неделями, но неважно, какой из них создан (если один проще другого) - надеюсь, это поможет :) – Baseline9

+0

Ahhh Я разработал его! Как вы говорите, мне нужно сбросить свой язык, так что Fri был первым днем ​​рабочей недели, а смещение - 7, поэтому он подобрал неделю окончания (каждую пятницу) - Спасибо всем за вашу помощь :) Его всегда то же самое я написал все из сложных бит кода именно это последнее препятствие мне нужно было преодолеть! – Baseline9

0
  • Начало Диапазон: DATEADD(DAY, 6 - DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

  • Конец диапазона: DATEADD(DAY, -1 * DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

Happy Coding