Oracle SQL从范围中选择单个值

时间:2014-12-12 21:09:40

标签: sql oracle

数据库的条目如下所示:

Title| Starting_Date | Ending_Date
 A   |    2012-03-03 | 2012-03-05
 B   |    2012-04-04 | 2012-04-04

我想要摆脱的是:

Title| Starting_date | Ending_Date
   A | 2012-03-03    | 2012-03-03
   A | 2012-03-04    | 2012-03-04
   A | 2012-03-05    | 2012-03-05
   B | 2012-04-04    | 2012-04-04

有没有办法做到这一点,而不必求助于创建一个存储一年中每一天可能的日子然后进行比较的表格?

1 个答案:

答案 0 :(得分:3)

你只需要一个数字表,你可以在CTE中生成它:

with nums(n) as (
      select level - 1
      from dual
      connect by level <= 100
     )
select e.title, (e.starting_date + n.n) as starting_date, (e.starting_date + n.n) as ending_date
from entries e join
     nums n
     on n.n <= (ending_date - starting_date);

这假设大约100的时间段对您的数据来说足够大。