Как создать таблицу календаря в Oracle

avatar
sal
8 апреля 2018 в 07:04
1771
2
0

Как создать таблицу календаря Oracle. как будто у меня есть таблица праздников

Id  FromDate    ToDate  Description
1   1-Feb-11    3-Feb-11    Maintance
3   2-Sep-09    5-Sep-09    Eid Holiday Fine Block
4   3-Dec-09    4-Dec-09    Due to System Problem
5   4-Dec-07    04-Dec-07   National Day

Я хочу сделать CTE из этой таблицы от минимума fromdate до максимума todate.

Ожидаемая таблица похожа.

Date        HolidayName

11-Feb-11   Maintance
12-Feb-11   Maintance
13-Feb-11   Maintance
02-Sep-09   Eid Holiday
03-Sep-09   Eid Holiday
04-Sep-09   Eid Holiday
05-Sep-09   Eid Holiday
Источник

Ответы (2)

avatar
Barbaros Özhan
8 апреля 2018 в 07:14
2
Предложение

connect by level можно использовать :

 select FromDate+level-1 "Date", Description "HolidayName"
   from holiday 
connect by level <=  ToDate - FromDate + 1
  group by FromDate+level-1, Description
  order by 1;

демо

avatar
D-Shih
8 апреля 2018 в 08:38
1

В oracle 11g 2 можно использовать CTE Recursive

вот так.

WITH CTE(from_date, i, datediff,description) AS
(
  SELECT from_date, 1 AS i, trunc(to_date - from_date) as datediff,description
  FROM t
  UNION ALL
  SELECT from_date, i + 1, datediff,description
  FROM CTE
  WHERE i <= datediff
)
, dates as (select i, from_date + i - 1 as "Date",description from CTE)
SELECT "Date",description "HolidayName"
FROM dates
ORDER BY description desc

Sqlfiddle:http://sqlfiddle.com/#!4/ac34c/7