Наличие четверга и среды в качестве даты начала и окончания недели для SQL Server

#sql #sql-server

Вопрос:

У меня есть небольшая проблема с преобразованием даты начала и окончания недели в четверг и среду в SQL Server.

Я придумал, как получить код для извлечения четверга и среды недели

 SELECT DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 3) ThursdayOfCurrentWeek
 

однако проблема в том, что начало текущей недели в четверг должно быть само по себе, но код возвращает четверг с прошлой недели.

Например, предпочтительно, чтобы это было:

 29/09/2021 (23/09/2021-29/09/2021);
30/09/2021 (30/09/2021-06/09/2021)
 

но SQL вернется:

 29/09/2021 (23/09/2021-29/09/2021);
30/09/2021 (23/09/2021-29/09/2021)
 

Есть ли способ, которым я мог бы это сделать?

Комментарии:

1. Вы могли SET бы получить значение DATEFIRST в начале вашей партии. В качестве альтернативы (и, возможно, лучше) потратьте время на создание таблицы календаря; они являются бесценным ресурсом в любом случае.

2. @Larnu спасибо! УСТАНОВИТЕ ДАТУ, которая сначала сработала для меня 🙂

Ответ №1:

..скрипка..

 select 
  _date, datename(weekday, _date) _dateweekday, 
  prvthursday, datename(weekday, prvthursday),
  cast(prvthursday as date) as week_start, cast(dateadd(day, 6, prvthursday) as date) as week_end
from
(
select *, dateadd(day, -(7 datepart(weekday, dateadd(day, @@datefirst, _date))-5/*<-- prev thursday:5, prev sat:7, prev monday:2 etc*/)%7, _date) as prvthursday
from
(
  --dates
  select dateadd(day, row_number() over(order by @@spid), '20210101') as _date
  from sys.all_objects
) as d
) as src;