#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;