处理多个日期范围以生成日期
在两个日期之间生成日期是各种编程场景中常见的情况。虽然为单个范围生成日期很简单,但扩展此功能以处理多个范围可能会带来挑战。
请考虑下表,其中每行代表一个日期范围:
ID | START_DATE | END_DATE |
---|---|---|
101 | April 1, 2013 | April 10, 2013 |
102 | May 10, 2013 | May 12, 2013 |
预期输出应生成每个范围内的单独日期:
ID | Dates |
---|---|
101 | April 1, 2013 |
101 | April 2, 2013 |
... | ... |
101 | April 10, 2013 |
102 | May 10, 2013 |
102 | May 11, 2013 |
102 | May 12, 2013 |
Oracle 提供了一个巧妙的解决方案来实现此目的result:
select A.ID, A.START_DATE + (delta - 1) dt from t_dates A, ( select level-1 as delta from dual connect by level-1 <= ( select max(end_date - start_date) from t_dates ) ) where A.START_DATE + (delta - 1) <= A.end_date order by 1, 2;
delta 列采用 Oracle 的 CONNECT BY 层次结构生成从 1 到表中结束日期和开始日期之间的最大差异的整数序列。 A.START_DATE (delta - 1) 表达式将结果中每条记录的开始日期增加适当的增量。 WHERE 子句过滤掉超出当前日期范围结束日期的结果。
享受这个在 Oracle 中跨多个范围生成日期的优雅解决方案!
以上是如何在 Oracle 中生成跨多个日期范围的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!