匿名块-按年、按月统计ok
declare
v_kssj varchar2(20); --传入开始时间
v_zzsj varchar2(20); --传入结束时间
v_nfyfsj varchar2(15);
t_kssj date; --循环中的开始时间
t_zzsj date; --循环中的结束时间
v_dnzhyt varchar2(20);
my_sql varchar2(32760);
begin
v_kssj:='2001-01-01 00:00:00'; --传入开始时间 赋值 t_kssj 2011-09-12 00:00:00
v_zzsj:='2003-03-02 00:00:00';
t_kssj:=to_date(v_kssj,'yyyy-mm-dd hh24:mi:ss');
-- my_sql:='create_date>'||t_kssj||' and create_date <'||t_zzsj;
v_nfyfsj:='month';
if v_nfyfsj='month' then --按月份 统计在线人数
loop --进入循环
select add_months(trunc(to_date('2001-09-12 00:00:00','yyyy-mm-dd hh24:mi:ss'),'YYYY'),12)-1/86400 into t_zzsj from dual;
--t_zzsj 在 传入开始时间 (2011-09-12 00:00:00)的基础上 取到当前最后一天
--t_kssj:=add_months(to_date(v_kssj,'yyyy-mm-dd hh24:mi:ss'),12);
t_kssj:=add_months(t_kssj,1);
t_zzsj:=add_months(t_kssj,1)-1/86400 ;
-- dbms_output.put_line(to_char(t_kssj,'yyyy-mm-dd hh24:mi:ss')||' '||v_zzsj);
my_sql:='create_date>='||to_char(t_kssj,'yyyy-mm-dd hh24:mi:ss')||' and create_date <='||to_char(t_zzsj,'yyyy-mm-dd hh24:mi:ss');
dbms_output.put_line(my_sql);
exit when t_kssj >to_date(v_zzsj,'yyyy-mm-dd hh24:mi:ss');
end loop;
elsif v_nfyfsj='year' then --按年份 统计在线人数 2011-09-12 00:00:00 2013-09-12 00:00:00
loop
t_zzsj:=add_months(trunc(to_date('2001-09-12 00:00:00','yyyy-mm-dd hh24:mi:ss'),'YYYY'),12);
t_kssj:=add_months(t_kssj,12);
v_dnzhyt:= to_char(add_months(trunc(t_kssj,'YYYY'),12)-1/86400,'yyyy-mm-dd hh24:mi:ss') ;
my_sql:='create_date>='||to_char(t_kssj,'yyyy-mm-dd hh24:mi:ss')||' and create_date <='||v_dnzhyt;
dbms_output.put_line(my_sql);
exit when t_kssj >to_date(v_zzsj,'yyyy-mm-dd hh24:mi:ss');
end loop;
--首先计算输入日期的所属年份的 最后一天
end if;
end;