我將以下代碼提供給了幾個 QA 團隊,效果很好。
with dt (dt, interv) as (
select TIMESTAMP '2022-11-01 02:37:11', numtodsinterval(5,'MINUTE') from dual
union all
select dt.dt interv, interv from dt
where dt.dt interv <
TIMESTAMP '2022-11-01 05:00:00')
select dt from dt;
問題是 VALUES 是硬編碼的,當一個人更改以放置不同的值時,他們經常會犯錯誤編輯,從而導致代碼失敗。
是否可以將此代碼修改為管道函式或帶有 out 引數或宏的程序以防止此類問題。
我需要傳遞 2 個日期(傳遞的日期順序不應該搞砸。也許使用最小(),最大())一個 INTERVAL 'N' 和一個單位 S=second M=MINUTE H=hour 或 D=Day .
感謝所有回答的人和您的專業知識。
uj5u.com熱心網友回復:
作為一個宏:
CREATE OR REPLACE FUNCTION gen_dt(i_from_dat IN TIMESTAMP, i_to_dat IN TIMESTAMP, i_interval IN NUMBER, i_interval_type IN VARCHAR2)
RETURN VARCHAR2
SQL_MACRO
IS
BEGIN
RETURN q'~SELECT LEAST(i_from_dat,i_to_dat) NUMTODSINTERVAL( (LEVEL-1)*i_interval, i_interval_type ) AS dt
FROM DUAL
CONNECT BY LEAST(i_from_dat,i_to_dat) NUMTODSINTERVAL( (LEVEL-1)*i_interval, i_interval_type) < GREATEST(i_from_dat, i_to_dat)~';
END ;
(請注意,您不能使用 WITH 子句,因為在 WITH() 部分中存在阻止替換變數的錯誤)
SELECT * FROM gen_dt(SYSTIMESTAMP, SYSTIMESTAMP 1, 4, 'HOUR') ;
03/11/22 13:48:23,072872000
03/11/22 17:48:23,072872000
03/11/22 21:48:23,072872000
04/11/22 01:48:23,072872000
04/11/22 05:48:23,072872000
04/11/22 09:48:23,072872000
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526788.html
標籤:甲骨文功能约会时间
上一篇:想讓python函式成為第一次列印的tv_turn_on_or_Off(),如果再次呼叫則關閉
下一篇:R組合和創建功能
