Sql Oracle中基于日期的行生成

Sql Oracle中基于日期的行生成,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,你好 我有以下表格中的数据 ID Start Date End Date 1 01-Nov-2018 01-Nov-2018 2 04-Nov-2018 07-Nov-2018 3 09-Nov-2018 09-Nov-2018 4 11-Nov-2018 12-Nov-2018 我想生成以下输出 ID Date 1 01-Nov-2018 2 04-Nov-2018 2 05-Nov-2018 2 06-Nov-2018 2

你好

我有以下表格中的数据

ID  Start Date    End Date   
1   01-Nov-2018   01-Nov-2018
2   04-Nov-2018   07-Nov-2018
3   09-Nov-2018   09-Nov-2018
4   11-Nov-2018   12-Nov-2018
我想生成以下输出

ID  Date
1   01-Nov-2018
2   04-Nov-2018
2   05-Nov-2018
2   06-Nov-2018
2   07-Nov-2018
3   09-Nov-2018
4   11-Nov-2018
4   12-Nov-2018
如果我想为单个ID处理它,我知道怎么做

SELECT
  ,d.ID
  , dv.date_start  start_date
  , dv.date_end    End_Date
  , dv.date_start + Level - 1  the_date
From (SELECT * 
      FROM table_name d
      WHERE d.id = <some_id>) dv
Where (dv.date_start + Level - 1) <= dv.date_end
Connect By Level <= dv.date_end - dv.date_start + 1;
但一旦我给出多个ID,它就会失控,并给出多个重复的日期。如果有人能帮助我生成所需数据,我将不胜感激。

试试这个

SELECT id, 
       start_date + LEVEL - 1 
FROM   t 
CONNECT BY LEVEL <= ( end_date - start_date + 1 ) 
           AND PRIOR id = id 
                     AND PRIOR sys_guid() IS NOT NULL; 
阅读:

Oracle 11g R2架构设置:

问题1:


太棒了,它工作得非常完美。我不知道我可以使用id=id来实现这一点。我还检查了sys_guid的功能。非常感谢。
CREATE TABLE table_name ( ID, Start_Date, End_Date ) AS
SELECT 1, DATE '2018-11-01', DATE '2018-11-01' FROM DUAL UNION ALL
SELECT 2, DATE '2018-11-04', DATE '2018-11-07' FROM DUAL UNION ALL
SELECT 3, DATE '2018-11-09', DATE '2018-11-09' FROM DUAL UNION ALL
SELECT 4, DATE '2018-11-11', DATE '2018-11-12' FROM DUAL;
SELECT t.*,
       c.COLUMN_VALUE AS the_date
FROM   table_name t
       CROSS JOIN
       TABLE(
         CAST(
           MULTISET(
             SELECT t.start_date + LEVEL - 1
             FROM   DUAL
             CONNECT BY t.start_date + LEVEL - 1 <= t.end_date
           )
           AS SYS.ODCIDATELIST
         )
       ) c
| ID |           START_DATE |             END_DATE |             THE_DATE |
|----|----------------------|----------------------|----------------------|
|  1 | 2018-11-01T00:00:00Z | 2018-11-01T00:00:00Z | 2018-11-01T00:00:00Z |
|  2 | 2018-11-04T00:00:00Z | 2018-11-07T00:00:00Z | 2018-11-04T00:00:00Z |
|  2 | 2018-11-04T00:00:00Z | 2018-11-07T00:00:00Z | 2018-11-05T00:00:00Z |
|  2 | 2018-11-04T00:00:00Z | 2018-11-07T00:00:00Z | 2018-11-06T00:00:00Z |
|  2 | 2018-11-04T00:00:00Z | 2018-11-07T00:00:00Z | 2018-11-07T00:00:00Z |
|  3 | 2018-11-09T00:00:00Z | 2018-11-09T00:00:00Z | 2018-11-09T00:00:00Z |
|  4 | 2018-11-11T00:00:00Z | 2018-11-12T00:00:00Z | 2018-11-11T00:00:00Z |
|  4 | 2018-11-11T00:00:00Z | 2018-11-12T00:00:00Z | 2018-11-12T00:00:00Z |