2013-08-21 4 views
2

У меня есть задача найти следующий рабочий день определенной даты. Он должен исключать праздники, которые указаны в праздничном столе (mst_holiday). У меня есть процедура, использующая функцию декодирования, чтобы найти следующий рабочий день, когда есть непрерывный отпуск или выходные дни. Например, если сегодня 21-07-2013 в среду, если мне нужно найти через 5 дней, он должен отображать 26-07-2013, если это праздник, он должен отображать последовательные праздники.следующий рабочий день даты дате в oracle

Пример функции декодирования, который я использовал ниже. Пожалуйста, помогите мне написать альтернативный sql-запрос.

DECODE 
    (ldate, 
    laps.holidaydate, DECODE 
     (ldate + 1, 
     laps.holidaydate + 1, DECODE 
      (ldate + 2, 
      laps.holidaydate + 2,ldate+3,ldate+2),ldate+1),ldate);` 
+0

Проверьте этот ответ, как готовую функцию: http://stackoverflow.com/a/16413949/1026199 –

+4

У вас есть ответы на предыдущую версию вопроса. Кажется, это ничего нового не добавляет. Вы должны объяснить, почему эти ответы не являются полезными и изменить ваш исходный вопрос, чтобы предоставить запрошенные данные и дополнительную информацию, а не повторять одно и то же. –

ответ

0

ли это 3 шага:

1) Генерировать диапазон дат, который вы хотите проверить, например:

select to_date(:start_date,'dd-mon-yyyy') + rownum -1 
from all_objects 
where rownum <= to_date(:end_date,'dd-mon-yyyy')-to_date(:start_date,'dd-mon-yyyy')+1 

2) Выберите минус таблицу с таблицей праздников

3) Выбрать по дате и получить первую запись

Все это в одном квадрате Выберите.

+0

Что означает этот конец? как минус с праздничным столом? –

+0

ограничивает диапазон дат между вами, вы должны убедиться, что по крайней мере 1 день бизнеса. Вы можете заменить на «where rownum <7». Выберите MINUS, вычитайте результаты выбора из другого: http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm –