Задачка по MsSql
Требуется ограничить поиск на ближайшие дни.
Требуется исключить из поиска:
1. данные за текущую текущую дату
2. если выполняется поиск в субботу или в воскресение, то результаты показывать начиная со вторника, то есть исключить данные до ближайшего вторника не включительно
3. чтобы в пятницу начиная с 16ти так же поиск ограничивался вторником и более отдаленными датами.
Решение:
DECLARE @CurrentDate DATE = CAST(GETDATE() AS DATE);
DECLARE @CurrentTime TIME = CAST(GETDATE() AS TIME);
DECLARE @DayOfWeek INT = DATEPART(WEEKDAY, @CurrentDate);
DECLARE @TuesdayDate DATE;
-- Определяем нужную дату для начала поиска
IF @DayOfWeek IN (6, 7)
-- Если сегодня воскресенье (7) или суббота (6)
BEGIN -- Находим ближайший вторник
SET @TuesdayDate = DATEADD(DAY, (2 - @DayOfWeek + 7) % 7, @CurrentDate);
END
ELSE BEGIN -- Проверяем, пятница ли и время
IF @DayOfWeek = 5 -- Если сегодня пятница
BEGIN IF @CurrentTime >= '16:00:00' -- Если текущее время после 16:00
BEGIN -- В пятницу после 16:00 мы меняем дату на ближайший вторник
SET @TuesdayDate = DATEADD(DAY, 4, @CurrentDate);
END ELSE BEGIN -- В пятницу до 16:00 обычный поиск, начиная со следующего дня
SET @TuesdayDate = DATEADD(DAY, 1, @CurrentDate);
END
END
ELSE
BEGIN -- Для остальных дней (Пн, Вт, Чт) используем обычный поиск, начиная со следующего дня
SET @TuesdayDate = DATEADD(DAY, 1, @CurrentDate);
END
END -- Выполняем запрос удаления
select * FROM [dbo].[AGZ_Costs_Flights] WHERE CS_DATEEND < @TuesdayDate OR CS_CHECKINDATEEND < @TuesdayDate;