我還有一種方法可以使用內部生成帶有時間的日期。我知道我可以按級別 <=N 使用 CONNECT ,但這需要我為每個間隔手動編輯 N ,這是我試圖避免的。
我喜歡做的是根據從午夜開始并且每個日期不超過 23:59:59 的間隔,用一系列時間填充范圍內的每個日期。如果時間過了午夜,我想在第二天午夜開始遞增..
例如,當我希望它在 01112022 23:50:00 停止時,下面會在 01112022 03:20:00 停止遞增
ALTER SESSION SET NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS';
select to_date (
'01-11-2022','mm-dd-yyyy' ) numtodsinterval(rownum*10,'MINUTE')
from dual
connect by level <= 20;
01112022 00:10:00
01112022 00:20:00
01112022 00:30:00
01112022 00:40:00
01112022 00:50:00
01112022 01:00:00
01112022 01:10:00
01112022 01:20:00
01112022 01:30:00
01112022 01:40:00
01112022 01:50:00
01112022 02:00:00
01112022 02:10:00
01112022 02:20:00
01112022 02:30:00
01112022 02:40:00
01112022 02:50:00
01112022 03:00:00
01112022 03:10:00
01112022 03:20:00
uj5u.com熱心網友回復:
您可以使用開始日期/結束日期邏輯來生成間隔,而不是嘗試使用確切的間隔數來指定 N。
SELECT DATE '2022-01-11' NUMTODSINTERVAL (LEVEL * 10, 'MINUTE')
FROM DUAL
CONNECT BY DATE '2022-01-11' NUMTODSINTERVAL (LEVEL * 10, 'MINUTE') < DATE '2022-01-12';
uj5u.com熱心網友回復:
這是一個很好的用例的遞回CTE。
with dt (dt, interv) as (
select date '2022-01-11', numtodsinterval(10,'MINUTE') from dual
union all
select dt.dt interv, interv from dt
where dt.dt interv < trunc(dt.dt) 1)
select dt from dt;
DT
-------------------
11.01.2022 00:00:00
11.01.2022 00:10:00
11.01.2022 00:20:00
.....
11.01.2022 23:50:00
請注意,我將間隔添加為一列,因此您無需在查詢中重復兩次。
的開始日期和時間間隔僅使用一次查詢,讓您可以輕松它們配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409559.html
標籤:
