處理多個日期範圍以產生日期
在兩個日期之間產生日期是各種程式設計場景中常見的情況。雖然為單一範圍產生日期很簡單,但擴展此功能以處理多個範圍可能會帶來挑戰。
請考慮下表,其中每行代表一個日期範圍:
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中文網其他相關文章!