番禺区移动端网站制作,网站设计赏析,厦门网站建设模板,wordpress 调用 discuz需求#xff1a;
1.根据输入的日期拆分成按周或按月显示
2.规定周的开始日期从星期一开始#xff0c;星期日结束
3.不足7天的一周#xff0c;如果小于2天#xff0c;则合并到上周或下周#xff1b;大于2天的则自成一周 代码#xff1a;
CREATE OR REPLACE PROCEDURE …需求
1.根据输入的日期拆分成按周或按月显示
2.规定周的开始日期从星期一开始星期日结束
3.不足7天的一周如果小于2天则合并到上周或下周大于2天的则自成一周 代码
CREATE OR REPLACE PROCEDURE printWeekAndMonth(fromdate in varchar2, todate in varchar2) IS l_getdate VARCHAR2(255) ;--转换后的临时时间 v_i NUMBER(10); l_tmpdate1 VARCHAR2(255); --临时时间 l_tmplastdate VARCHAR2(255); --得到临时当月最后一天 type v_array IS VARRAY(7) OF VARCHAR2(20); v_arr v_array; BEGIN l_tmplastdate: to_char(LAST_DAY(to_date(fromdate,YYYY-MM-DD)),YYYY-MM-DD); dbms_output.put_line(打印周次); v_arr : v_array(星期一,星期二,星期三,星期四,星期五,星期六,星期日); --如果输入的开始日期为星期一 if to_char(to_date(fromdate,yyyy-mm-dd),day) v_arr(1) then l_getdate : to_char(to_date(fromdate,yyyy-mm-dd),yyyy-mm-dd);--一周开始日期 else --不为星期一则计算下个星期一的日期 for i in 1..v_arr.count loop if v_arr(i) to_char(to_date(fromdate,yyyy-mm-dd),day) then --dbms_output.put_line(fromdate || 所在的星期为 || v_arr(i)); l_getdate : to_char(to_date(fromdate,yyyy-mm-dd)8-i,yyyy-mm-dd);--一周开始日期 if i 5 then --开始日期范围在星期六到星期天合并到下周 dbms_output.put_line(to_char(to_date(fromdate,yyyy-mm-dd),yyyy-mm-dd) || ~ || to_char(to_date(l_getdate,yyyy-mm-dd)6,yyyy-mm-dd));--需要插入到表中... l_getdate : to_char(to_date(l_getdate,yyyy-mm-dd)7,yyyy-mm-dd); else --开始日期范围在星期二到星期五自成一周 dbms_output.put_line(to_char(to_date(fromdate,yyyy-mm-dd),yyyy-mm-dd) || ~ || to_char(to_date(l_getdate,yyyy-mm-dd)-1,yyyy-mm-dd));--需要插入到表中... end if; end if; end loop; end if; l_tmpdate1 : l_getdate; while to_date(l_tmpdate1,yyyy-mm-dd)14 to_date(todate,yyyy-mm-dd) loop --排除结束日期所在周和前一周 l_tmpdate1 : to_char(to_date(l_getdate,yyyy-mm-dd)6,yyyy-mm-dd);--一周结束日期一周开始日期6 dbms_output.put_line(l_getdate || ~ || l_tmpdate1);--需要插入到表中 l_getdate : to_char(to_date(l_tmpdate1,yyyy-mm-dd)1,yyyy-mm-dd);--一周开始日期一周结束日期1 end loop; v_i : to_date(todate,yyyy-mm-dd)-to_date(l_tmpdate1,yyyy-mm-dd); --dbms_output.put_line(最后两周的天数 || v_i); if v_i 14 then dbms_output.put_line(to_char(to_date(l_tmpdate1,yyyy-mm-dd)1,yyyy-mm-dd) || ~ || to_char(to_date(l_tmpdate1,yyyy-mm-dd)7,yyyy-mm-dd)); dbms_output.put_line(to_char(to_date(l_tmpdate1,yyyy-mm-dd)8,yyyy-mm-dd) || ~ || to_char(to_date(l_tmpdate1,yyyy-mm-dd)14,yyyy-mm-dd)); else if v_i 10 then dbms_output.put_line(to_char(to_date(l_tmpdate1,yyyy-mm-dd)1,yyyy-mm-dd) || ~ || to_char(to_date(todate,yyyy-mm-dd),yyyy-mm-dd)); else if v_i 10 and v_i 14 then dbms_output.put_line(to_char(to_date(l_tmpdate1,yyyy-mm-dd)1,yyyy-mm-dd) || ~ || to_char(to_date(l_tmpdate1,yyyy-mm-dd)7,yyyy-mm-dd)); dbms_output.put_line(to_char(to_date(l_tmpdate1,yyyy-mm-dd)8,yyyy-mm-dd) || ~ || to_char(to_date(todate,yyyy-mm-dd),yyyy-mm-dd)); end if; end if; end if; dbms_output.put_line(打印月份); l_tmpdate1:fromdate; WHILE (to_date(l_tmpdate1,YYYY-MM-DD)-(to_date(todate,YYYY-MM-DD))) 0 LOOP DBMS_OUTPUT.PUT_LINE( l_tmpdate1 || ~ || l_tmplastdate); --计算下个月时间 l_tmpdate1 : to_char(to_date(l_tmplastdate,YYYY-MM-DD)1,YYYY-MM-DD); l_tmplastdate: to_char(LAST_DAY(to_date(l_tmpdate1,YYYY-MM-DD)),YYYY-MM-DD); END LOOP;
END printWeekAndMonth; 运行示例 begin -- Call the procedure printweekandmonth(fromdate 2012-01-01, todate 2012-12-31); end;
打印周次 2012-01-01~2012-01-08 2012-01-09~2012-01-15 2012-01-16~2012-01-22 2012-01-23~2012-01-29 2012-01-30~2012-02-05 2012-02-06~2012-02-12 2012-02-13~2012-02-19 2012-02-20~2012-02-26 2012-02-27~2012-03-04 2012-03-05~2012-03-11 2012-03-12~2012-03-18 2012-03-19~2012-03-25 2012-03-26~2012-04-01 2012-04-02~2012-04-08 2012-04-09~2012-04-15 2012-04-16~2012-04-22 2012-04-23~2012-04-29 2012-04-30~2012-05-06 2012-05-07~2012-05-13 2012-05-14~2012-05-20 2012-05-21~2012-05-27 2012-05-28~2012-06-03 2012-06-04~2012-06-10 2012-06-11~2012-06-17 2012-06-18~2012-06-24 2012-06-25~2012-07-01 2012-07-02~2012-07-08 2012-07-09~2012-07-15 2012-07-16~2012-07-22 2012-07-23~2012-07-29 2012-07-30~2012-08-05 2012-08-06~2012-08-12 2012-08-13~2012-08-19 2012-08-20~2012-08-26 2012-08-27~2012-09-02 2012-09-03~2012-09-09 2012-09-10~2012-09-16 2012-09-17~2012-09-23 2012-09-24~2012-09-30 2012-10-01~2012-10-07 2012-10-08~2012-10-14 2012-10-15~2012-10-21 2012-10-22~2012-10-28 2012-10-29~2012-11-04 2012-11-05~2012-11-11 2012-11-12~2012-11-18 2012-11-19~2012-11-25 2012-11-26~2012-12-02 2012-12-03~2012-12-09 2012-12-10~2012-12-16 2012-12-17~2012-12-23 2012-12-24~2012-12-31 打印月份 2012-01-01~2012-01-31 2012-02-01~2012-02-29 2012-03-01~2012-03-31 2012-04-01~2012-04-30 2012-05-01~2012-05-31 2012-06-01~2012-06-30 2012-07-01~2012-07-31 2012-08-01~2012-08-31 2012-09-01~2012-09-30 2012-10-01~2012-10-31 2012-11-01~2012-11-30 2012-12-01~2012-12-31