Uncategorized

Задачка по 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;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *