DECLARE
a number(2);
cnt number;
BEGIN
FOR a in 01 .. 12 LOOP
SELECT count(*)
INTO cnt
FROM ECMS_ONLINE_TRANSACTION eoa
WHERE eoa.CREATETIME BETWEEN TO_DATE('2021-01-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2021-01-01 01:59:59','YYYY-MM-DD HH24:MI:SS');
dbms_output.put_line(' month: ' || a || ' time stamp 01:00:00- 01:59:59 number of transaction :' || cnt );
END LOOP;
END;
我在根據回圈更改月份時遇到問題,其中我在函式之間使用過的子句 todate 函式的月份必須根據回圈進行更改,如果 a 變為 1,則 where 子句中的月份必須根據1 如果 a 變為 2 則月份已更改為 2
敵人的例子
如果 a =1
WHERE eoa.CREATETIME BETWEEN TO_DATE('2021-01-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2021-01-01 01:59:59','YYYY-MM-DD HH24:MI:SS');
如果 a =2
WHERE eoa.CREATETIME BETWEEN TO_DATE('2021-02-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2021-02-01 01:59:59','YYYY-MM-DD HH24:MI:SS');
我使用了時間戳變數
uj5u.com熱心網友回復:
使用這個條件:
WHERE eoa.CREATETIME BETWEEN TO_DATE('2021-' || lpad(a, 2, '0') || '-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2021-' || lpad(a, 2, '0') || '-01 01:59:59','YYYY-MM-DD HH24:MI:SS');
CREATETIME寫這個可能更簡單(但如果你有索引,它不會使用索引):
WHERE to_char(eoa.CREATETIME, 'MM') = a
AND to_char(eoa.CREATETIME, 'HH24' = '01'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461636.html
