Добрый день.
Задача в следующем. Необходимо выгрузить заявки из системы, которые были зарегистрированы в рабочее время.
Рабочее время: пн-чт с 9 до 18, пт с 9 до 16:45. Так же необходимо учесть праздничные и предпразничные дни. В предпразничный день рабочее время с 9 до 16:45.
Праздничные дни исключил при помощи таблицы, в которой хранятся праздничные дни. Выглядит это примерно так
and incident.date_logged not in ((select hplan1 from hplan_head where hplan_head_id=2))
Выходные исключил так:
and DATEname (WEEKDAY, incident.date_logged) not in ('Sunday', 'Saturday') --исключить выходные
Самое сложное для меня это установить рабочее расписание. Как ограничить выгрузку в предпразничный день до 16:45 если он выпадает на среду (при этом вне праздничного дня выводил до 18:00).
Рабочее расписание выставил как то так:
AND ((((CONVERT(varchar, incident.date_logged, 108) > '09:00:00') AND (CONVERT(varchar, incident.date_logged, 108) < '16:45:00')) --интервал времени в пятницу
and DATEname (WEEKDAY, incident.date_logged)='Friday')
or (((CONVERT(varchar, incident.date_logged, 108) > '09:00:00') AND (CONVERT(varchar, incident.date_logged, 108) < '18:00:00')) --интервал времени в остальные дни недели
and DATEname (WEEKDAY, incident.date_logged) in ('Monday','Tuesday','Wednesday','Thursday'))
Так же вывел предпразничный день и задал ему рабочее расписание
(((CONVERT(varchar, incident.date_logged, 108) > '09:00:00') AND (CONVERT(varchar, incident.date_logged, 108) < '16:45:00')) --интервал времени в предпразничный 1 день (смотрит на список выходных)
and CONVERT(varchar, incident.date_logged, 104)= CONVERT(varchar, DATEADD(day,-1, (select hplan1 from hplan_head where hplan_head_id=2)), 104))
Вопрос: Как мне задать условие if в where, чтобы при выгрузке бралось рабочее расписание, но если выпадает предпразничный день то он выгружал до 16:45?
Полный селект не выкладываю так как он очень большой.
Дополнительно выкладываю часть скрипта как он есть
AND ((((CONVERT(varchar, incident.date_logged, 108) > '09:00:00') AND (CONVERT(varchar, incident.date_logged, 108) < '16:45:00')) --интервал времени в пятницу
and DATEname (WEEKDAY, incident.date_logged)='Friday')
or (((CONVERT(varchar, incident.date_logged, 108) > '09:00:00') AND (CONVERT(varchar, incident.date_logged, 108) < '18:00:00')) --интервал времени в остальные дни недели
and DATEname (WEEKDAY, incident.date_logged) in ('Monday','Tuesday','Wednesday','Thursday'))
or (((CONVERT(varchar, incident.date_logged, 108) > '09:00:00') AND (CONVERT(varchar, incident.date_logged, 108) < '16:45:00')) --интервал времени в предпразничный 1 день (смотрит на список выходных)
and CONVERT(varchar, incident.date_logged, 104)= CONVERT(varchar, DATEADD(day,-1, (select hplan1 from hplan_head where hplan_head_id=2)), 104))