SQL PI/SQL 函数
SQL PI/SQL Function
DECLARE
a number(2);
a1 int;
BEGIN
FOR a in 01 .. 12 LOOP
SET a1 =(SELECT count(*)
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('value of a: ' || a);
END LOOP;
END;
**我在这段代码上有一个错误,我需要月份的值,这意味着 a 和各自的计数,以及在什么情况下月份应该根据 a 改变,请有人帮助解决这个问题我正在使用 oracle db **
我是这样理解这个问题的。
示例数据(仅 createtime
列(以 YYYY-MM-DD
格式显示),因为查询不使用任何其他列):
SQL> select * from ecms_online_transaction order by createtime;
CREATETIME
----------
2021-01-01
2021-02-24
2021-02-25
2021-04-13
2021-08-22
2021-08-29
6 rows selected.
SQL> set serveroutput on
您似乎想要计算行数 每月(天数、小时数、年数...-它们无关紧要),您可以编写这样的在游标中查询并只显示它获取的内容):
SQL> BEGIN
2 FOR cur_r IN ( SELECT TO_CHAR (createtime, 'mm') month, COUNT (*) cnt
3 FROM ecms_online_transaction
4 GROUP BY TO_CHAR (createtime, 'mm')
5 ORDER BY TO_CHAR (createtime, 'mm'))
6 LOOP
7 DBMS_OUTPUT.put_line (
8 'Month = ' || cur_r.month || ', count = ' || cur_r.cnt);
9 END LOOP;
10 END;
11 /
Month = 01, count = 1
Month = 02, count = 2
Month = 04, count = 1
Month = 08, count = 2
PL/SQL procedure successfully completed.
SQL>
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-' || 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');
dbms_output.put_line(' month: ' || a || ' time stamp 01:00:00- 01:59:59 number of transaction :' || cnt );
END LOOP;
END;
DECLARE
a number(2);
a1 int;
BEGIN
FOR a in 01 .. 12 LOOP
SET a1 =(SELECT count(*)
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('value of a: ' || a);
END LOOP;
END;
**我在这段代码上有一个错误,我需要月份的值,这意味着 a 和各自的计数,以及在什么情况下月份应该根据 a 改变,请有人帮助解决这个问题我正在使用 oracle db **
我是这样理解这个问题的。
示例数据(仅 createtime
列(以 YYYY-MM-DD
格式显示),因为查询不使用任何其他列):
SQL> select * from ecms_online_transaction order by createtime;
CREATETIME
----------
2021-01-01
2021-02-24
2021-02-25
2021-04-13
2021-08-22
2021-08-29
6 rows selected.
SQL> set serveroutput on
您似乎想要计算行数 每月(天数、小时数、年数...-它们无关紧要),您可以编写这样的在游标中查询并只显示它获取的内容):
SQL> BEGIN
2 FOR cur_r IN ( SELECT TO_CHAR (createtime, 'mm') month, COUNT (*) cnt
3 FROM ecms_online_transaction
4 GROUP BY TO_CHAR (createtime, 'mm')
5 ORDER BY TO_CHAR (createtime, 'mm'))
6 LOOP
7 DBMS_OUTPUT.put_line (
8 'Month = ' || cur_r.month || ', count = ' || cur_r.cnt);
9 END LOOP;
10 END;
11 /
Month = 01, count = 1
Month = 02, count = 2
Month = 04, count = 1
Month = 08, count = 2
PL/SQL procedure successfully completed.
SQL>
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-' || 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');
dbms_output.put_line(' month: ' || a || ' time stamp 01:00:00- 01:59:59 number of transaction :' || cnt );
END LOOP;
END;