在日期范围中选择常见日期

时间:2016-08-15 06:41:55

标签: sql oracle

我有一个select语句,它返回日期范围(From和To列),我想生成一个在所有范围内共同的所有日期的列表。

例如:

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 个答案:

答案 0 :(得分: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