我想在Oracle中使用递归WITH子句在两个不同日期之间生成一个天范围。
WITH CTE_Dates (cte_date) AS
( SELECT CAST(TO_DATE('10-02-2017', 'DD-MM-YYYY') AS DATE) cte_date FROM dual
UNION ALL
SELECT CAST( (cte_date + 1) AS DATE) cte_date
FROM CTE_Dates
WHERE TRUNC(cte_date) + 1 <= TO_DATE('20-02-2017', 'DD-MM-YYYY')
)
SELECT * FROM CTE_Dates
Run Code Online (Sandbox Code Playgroud)
返回的结果与预期的完全不同:
10-02-2017
09-02-2017
08-02-2017
07-02-2017
06-02-2017
... (unlimited)
Run Code Online (Sandbox Code Playgroud)
预期结果:
10-02-2017
11-02-2017
...
19-02-2017
20-02-2017
Run Code Online (Sandbox Code Playgroud)
Oracle Database 11g Express Edition 11.2.0.2.0版-64位生产。
编辑: 据我了解,这是Oracle中的已知错误,该错误通过Oracle 11.2.0.2存在,并且已在11.2.0.3中修复。
替代解决方案:
SELECT TRUNC (TO_DATE('10-02-2017', 'DD-MM-YYYY') + ROWNUM -1) dt
FROM DUAL
CONNECT BY ROWNUM <= (TO_DATE('20-02-2017', 'DD-MM-YYYY') - (TO_DATE('10-02-2017', …Run Code Online (Sandbox Code Playgroud)