2016-08-15 29 views
0

我有一个select语句返回日期范围(From和To columns),我想生成所有范围内通用的所有日期的列表。选择日期范围中的公共日期

例如:

FROM     TO 
01-12-2016   11-12-2016 
05-12-2016   17-12-2016 
07-12-2016   20-12-2016 

现在,我想都发生在上述所有范围的所有日期。在这种情况下,应该检索以下日期。

07-12-2016 
08-12-2016 
09-12-2016 
10-12-2016 
11-12-2016 

因为这些日期在所有返回的结果中很常见。这可能与SQL(或PL/SQL)?

回答

1

样本数据:

CREATE TABLE tt1 (
    "FROM" date, "TO" date 
); 

INSERT INTO tt1 VALUES(date '2016-12-01', date '2016-12-11'); 
INSERT INTO tt1 VALUES(date '2016-12-05', date '2016-12-17'); 
INSERT INTO tt1 VALUES(date '2016-12-07', date '2016-12-20'); 
COMMIT; 

查询:

SELECT d1 + level - 1 As da_te 
FROM (
     SELECT max("FROM") as d1, 
      min("TO") as d2 
     FROM tt1 
) 
CONNECT BY LEVEL <= d2 - d1 + 1 

结果:

DA_TE  
---------- 
2016/12/07 
2016/12/08 
2016/12/09 
2016/12/10 
2016/12/11