Необходимо создать список календарей до «11-30-2014» в одном запросе. Но не все дни, только рабочие дни (с понедельника по пятницу) и за исключением праздников. Праздничные дни хранятся в таблице holidays
. Специальная таблица dual
в oracle DB используется для генерации.Сгенерировать календарь до специальной даты одним запросом
SELECT to_date(current_date + level-1,'MM-DD-YY') as Calendar
FROM dual, holidays
WHERE to_date(current_date,'MM-DD-YY')+level-1 <= to_date('11-30-14','MM-DD-YY')
AND to_char(to_date(current_date,'MM-DD-YY')+level-1,'D') NOT IN (6,7)
CONNECT BY level <= 365
MINUS
SELECT to_date(data,'MM-DD-YY')
FROM holidays;
Я сделал это, но я сердцем этот случай можно сделать с 4 строками. Более простой. Если кто-то знает, как сделать это проще, тогда спасибо!
Почему вы ограничены до 365 дней, если хотите сгенерировать до 2014-30-11 годов, что более чем за год? Почему вы вызываете 'to_date()' для вещей, которые уже являются датами, - вы вводите зависимость от 'NLS_DATE_FORMAT', а также неэффективны? –