powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / if в where
8 сообщений из 8, страница 1 из 1
if в where
    #39854674
AlexandrAVG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Задача в следующем. Необходимо выгрузить заявки из системы, которые были зарегистрированы в рабочее время.
Рабочее время: пн-чт с 9 до 18, пт с 9 до 16:45. Так же необходимо учесть праздничные и предпразничные дни. В предпразничный день рабочее время с 9 до 16:45.
Праздничные дни исключил при помощи таблицы, в которой хранятся праздничные дни. Выглядит это примерно так
Код: plsql
1.
and incident.date_logged not in ((select hplan1 from hplan_head where hplan_head_id=2))


Выходные исключил так:
Код: plsql
1.
and DATEname (WEEKDAY, incident.date_logged) not in ('Sunday', 'Saturday') --исключить выходные


Самое сложное для меня это установить рабочее расписание. Как ограничить выгрузку в предпразничный день до 16:45 если он выпадает на среду (при этом вне праздничного дня выводил до 18:00).
Рабочее расписание выставил как то так:
Код: plsql
1.
2.
3.
4.
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'))


Так же вывел предпразничный день и задал ему рабочее расписание
Код: plsql
1.
2.
(((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?

Полный селект не выкладываю так как он очень большой.
Дополнительно выкладываю часть скрипта как он есть
Код: plsql
1.
2.
3.
4.
5.
6.
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))
...
Рейтинг: 0 / 0
if в where
    #39854678
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrAVG,

не особо разбирая: заведите таблицу календарь, выставьте в неё все свои праздничные, предпразничные, можно даже с 09:00:00 - 18:00:00 и ограничивайте всё на неё, и жить станет проще
...
Рейтинг: 0 / 0
if в where
    #39854692
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrAVGВопрос: Как мне задать условие if в where...
Откройте для себя синтаксис CASE.
...
Рейтинг: 0 / 0
if в where
    #39854707
AlexandrAVG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MegabyteAlexandrAVGВопрос: Как мне задать условие if в where...
Откройте для себя синтаксис CASE.

Можно на примере объяснить, как через case прописать условие if?
Например: Если не предпразничный день и день недели пн-чт, то расписание с 9 до 18
если предпразничный день и день недели пн-чт, то расписание с 9 до 16:45
...
Рейтинг: 0 / 0
if в where
    #39854740
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrAVGMegabyteпропущено...

Откройте для себя синтаксис CASE.

Можно на примере объяснить, как через case прописать условие if?
Например: Если не предпразничный день и день недели пн-чт, то расписание с 9 до 18
если предпразничный день и день недели пн-чт, то расписание с 9 до 16:45

Код: sql
1.
AND CONVERT(varchar, incident.date_logged, 108) < case when DATEname (WEEKDAY, incident.date_logged) = 'Friday' then '16:45:00' else '18:00:00' end
...
Рейтинг: 0 / 0
if в where
    #39854992
AlexandrAVG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал через исключение
Код: plsql
1.
2.
3.
4.
5.
6.
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')))
and not (((CONVERT(varchar, incident.date_logged, 108) > '16:45:00') AND (CONVERT(varchar, incident.date_logged, 108) < '18:00: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))


задал рабочее расписание и добавил исключение в предпразничный день.
в поле hplan1 задается праздничный день

всем спасибо за ответы!
...
Рейтинг: 0 / 0
if в where
    #39856424
144m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexandrAVG,

А Вы учли в итоговом коде переносы рабочих дней на выходные, когда суббота или воскресенье объявляются рабочими днями?
...
Рейтинг: 0 / 0
if в where
    #39856549
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrAVGсделал через исключение
Код: plsql
1.
2.
3.
4.
5.
6.
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')))
and not (((CONVERT(varchar, incident.date_logged, 108) > '16:45:00') AND (CONVERT(varchar, incident.date_logged, 108) < '18:00: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))


задал рабочее расписание и добавил исключение в предпразничный день.
в поле hplan1 задается праздничный день

всем спасибо за ответы!

не за што, надежда только на то, что этот скрипт будет работать не где-нибудь в центре по отработке ориентации ракет в безвоздушном пространстве
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / if в where
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]