Я только что создал функцию, которая будет давать вам количество дней до определенного дня недели (@endDay).1 = воскресенье, 2 = понедельник .... 6 = пятница, 7 = суббота.Поэтому в пятницу вы должны передать функцию 6 для @endDay.Вот DDL для создания функции:
-- Note that the logic above is assuming your @@DATEFIRST=7 (this is the default, you can check using `SELECT @@DATEFIRST`.
CREATE FUNCTION dbo.DaysUntilThisWeekday(@endDay TINYINT, @date DATE)
RETURNS TABLE WITH SCHEMABINDING AS RETURN
SELECT N = ((@endDay+7)-DATEPART(WEEKDAY,@date))%7
WHERE @endDay BETWEEN 1 AND 7; -- startup predicate, no rows returned otherwise
GO
Вы можете использовать эту функцию для своей таблицы следующим образом (включая примеры данных, которые вы можете запускать локально):
DECLARE @yourTable TABLE (SomeDate DATE);
INSERT @yourTable(SomeDate) VALUES ('20190518'),('20190519'),('20190520'),('20190521'),
('20190522'),('20190523'),('20190524'),('20190525'),('20190526'),('20190527')
DECLARE @endDay TINYINT = 6, -- 6 for Friday
@startDay DATE = GETDATE();
SELECT t.SomeDate
FROM @yourTable AS t
CROSS JOIN dbo.DaysUntilThisWeekday(@endDay,@startDay) AS f
WHERE t.SomeDate BETWEEN @startDay AND DATEADD(DAY,f.N,@startDay);
Возвращает:
SomeDate
----------
2019-05-20
2019-05-21
2019-05-22
2019-05-23
2019-05-24
Это все записи между сегодняшним днем и пятницей (включительно).Если вы не можете создать функцию, вы можете просто сделать это:
DECLARE @yourTable TABLE (SomeDate DATE);
INSERT @yourTable(SomeDate) VALUES ('20190518'),('20190519'),('20190520'),('20190521'),
('20190522'),('20190523'),('20190524'),('20190525'),('20190526'),('20190527')
DECLARE @startDay DATE = GETDATE();
SELECT t.SomeDate
FROM @yourTable AS t
WHERE t.SomeDate BETWEEN @startDay AND
DATEADD(DAY,((13)-DATEPART(WEEKDAY,GETDATE()))%7,@startDay);