Иногда для решения задачи бывает удобно получить список недель или последовательность дат для дальнейшего объединения с другими данными из БД. Получить список дат в указанном диапазоне можно таким образом (применительно к T-SQL):
Если нужно получить список всех дат начала недели, то пригодится такой трюк:
DECLARE @StartDate date = '20190101' DECLARE @EndDate date = '20191231' ;WITH calendarDates as ( SELECT dt = @StartDate UNION ALL SELECT DATEADD(DAY, 1, dt) FROM calendarDates WHERE DATEADD(DAY, 1, dt) <= @EndDate ) SELECT * FROM calendarDates ORDER BY dt OPTION (MAXRECURSION 0)
Если нужно получить список всех дат начала недели, то пригодится такой трюк:
DECLARE @StartDate date = '20190101' DECLARE @EndDate date = '20191231' DECLARE @WeekStartDate date = DATEADD(DAY, 2 - DATEPART(ISO_WEEK, @StartDate), CAST(@StartDate AS DATE)) DECLARE @WeekEndDate date = DATEADD(DAY, 8 - DATEPART(ISO_WEEK, GETDATE()), CAST(GETDATE() AS DATE)) ;WITH calendarDates as ( SELECT dt = @WeekStartDate UNION ALL SELECT DATEADD(DAY, 7, dt) FROM calendarDates WHERE DATEADD(DAY, 7, dt) <= @EndDate ) SELECT * FROM calendarDates ORDER BY dt OPTION (MAXRECURSION 0)
Комментариев нет:
Отправить комментарий