匿名块-按年、按月统计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;
  
 

创建时间:2022-04-02 15:09
浏览量:0