Такой календарь полезен в быту и народном хозяйстве.
Задача. Детальный календарь.
Создать таблицу-календарь на 2000-2020 годы со следующими полями: дата, день месяца, месяц, год, номер дня недели, день недели, номер недели в месяце, номер недели в году:
Напишем запрос, обратим внимание, что взгляд Oracle на то, как считать номер недели в месяце и номер недели в году, не всем нравится, поэтому предложим еще и альтернативную версию:
from (select to_date('31.12.1999', 'DD.MM.YYYY') + level dt, level lvl
from dual
connect by level <= 7671);
Задача. Календарь с индикаторами выходных дней.
Дана таблица со списком выходных дней 2012 года, в которой учитываются праздники и переносы выходных дней. С помощью иерархического запроса создать календарь на 2012 год со столбцом, представляющим собой индикатор суббот и воскресений, а также столбцом, представляющим собой индикатор нерабочих дней. Индикаторные поля принимают значение 0 или 1.
Изучив постановления правительства, создадим таблицу со списком выходных дней:
create table kk_holidays_list(operdate date);
insert into kk_holidays_list(operdate) values(to_date('01.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('02.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('03.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('04.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('05.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('06.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('07.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('09.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('14.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('15.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('21.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('22.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('28.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('29.01.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('04.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('05.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('11.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('12.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('18.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('19.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('23.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('25.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('26.02.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('03.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('04.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('09.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('10.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('17.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('18.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('24.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('25.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('31.03.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('01.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('07.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('14.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('15.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('21.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('22.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('29.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('30.04.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('01.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('06.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('07.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('09.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('13.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('19.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('20.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('26.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('27.05.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('02.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('03.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('10.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('11.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('12.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('16.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('17.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('23.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('24.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('30.06.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('01.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('07.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('14.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('15.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('21.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('22.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('28.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('29.07.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('04.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('05.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('11.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('12.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('18.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('19.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('25.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('26.08.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('01.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('02.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('09.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('15.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('16.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('22.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('23.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('29.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('30.09.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('06.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('07.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('13.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('14.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('20.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('21.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('27.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('28.10.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('03.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('04.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('05.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('10.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('11.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('17.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('18.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('24.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('25.11.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('01.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('02.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('08.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('09.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('15.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('16.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('22.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('23.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('29.12.2012', 'dd.mm.yyyy'));
insert into kk_holidays_list(operdate) values(to_date('30.12.2012', 'dd.mm.yyyy'));
Соединим простой календарик за 2012 год, указанный в подзапросе q1, со списком выходных kk_holidays_list. Будем использовать left join.
is_weekend = 1 для дней недели номер 6 и 7. is_holiday = 1 для дат из справочника выходных kk_holidays_list: