OPER@XE> create or replace procedure test_p(vd1 varchar2,vd2 varchar2) 2 as 3 get_date1 date; 4 get_date2 date; 5 cnt number; 6 begin 7 get_date1:=to_date(vd1,'yyyymmdd')+1; 8 get_date2:=to_date(vd2,'yyyymmdd')-1; 9 cnt:=trunc(get_date2-get_date1); 10 for i in 0..cnt loop 11 dbms_output.put_line(get_date1+i); 12 end loop; 13 end; 14 /过程已创建。OPER@XE> exec test_p('20100301','20100305') 2010-03-02 2010-03-03 2010-03-04PL/SQL 过程已成功完成。
--开始日期 '2009-03-01' --结束日期 '2009-03-10'SELECT LEVEL + DATE '2009-03-01' - 1 FROM dual CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
--转换成X月X日 SELECT ltrim(to_char(LEVEL + DATE '2009-03-01' - 1, 'mm'), '0') || '月' || ltrim(to_char(LEVEL + DATE '2009-03-01' - 1, 'dd'), '0') || '日' FROM dual CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
SQL code--开始日期 '2009-03-01' --结束日期 '2009-03-10'SELECT LEVEL + DATE '2009-03-01' - 1 FROM dual CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2; 谁解释一下这段代码啊??
2 as
3 get_date1 date;
4 get_date2 date;
5 cnt number;
6 begin
7 get_date1:=to_date(vd1,'yyyymmdd')+1;
8 get_date2:=to_date(vd2,'yyyymmdd')-1;
9 cnt:=trunc(get_date2-get_date1);
10 for i in 0..cnt loop
11 dbms_output.put_line(get_date1+i);
12 end loop;
13 end;
14 /过程已创建。OPER@XE> exec test_p('20100301','20100305')
2010-03-02
2010-03-03
2010-03-04PL/SQL 过程已成功完成。
--结束日期 '2009-03-10'SELECT LEVEL + DATE '2009-03-01' - 1
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
SELECT ltrim(to_char(LEVEL + DATE '2009-03-01' - 1, 'mm'), '0') || '月' ||
ltrim(to_char(LEVEL + DATE '2009-03-01' - 1, 'dd'), '0') || '日'
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
--结束日期 '2009-03-10'SELECT LEVEL + DATE '2009-03-01' - 1
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
谁解释一下这段代码啊??
connect by的意思是 从level=1开始 到结束时间与起始时间的时间差+1天结束
循环输出LEVEL + DATE '2009-03-01' - 1 结果就是从起始时间开始到结束时间为止的时间结果集