Sql 如何在Oracle中创建日历表
如何创建Oracle日历表。就像我有一张假期的桌子Sql 如何在Oracle中创建日历表,sql,oracle,Sql,Oracle,如何创建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 我想从这个表中
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
希望是桌上型的
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
可以使用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;
可以使用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;
在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:在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: