select to_char(to_date(OXYGENTIME,'yyyy-MM-dd HH24:mi:ss'),'w') 周,trunc(avg(eos),2) eos  from v_OXYGENMAN where userid=2 and OXYGENTIME like '2013-02%' group by to_char(to_date(OXYGENTIME,'yyyy-MM-dd HH24:mi:ss'),'W')
查询出表中二月的全部天的数据 ,并按周来分组 。但我这种分组,是1号为第一周的第一天。  
28天的话,就是除以7整整四个周。 而要求是自然周,就是比如2013年2月,1号、2号为第一周,
3号到9号第二周,10号到16号为第三周,17号到23号为第四周,24号到28号为第四周。急求大神指教,在线等啊!!!!   oraclesql周  月

解决方案 »

  1.   


      1  select trunc(sysdate,'mm')+rownum-1 aa,
      2  ceil(to_char((trunc(sysdate,'mm')+rownum-1),'dd')/7) bb
      3* from dual connect by rownum<=add_months(sysdate,1)-sysdate
    SQL> /AA                     BB
    -------------- ----------
    01-4月 -13              1
    02-4月 -13              1
    03-4月 -13              1
    04-4月 -13              1
    05-4月 -13              1
    06-4月 -13              1
    07-4月 -13              1
    08-4月 -13              2
    09-4月 -13              2
    10-4月 -13              2
    11-4月 -13              2AA                     BB
    -------------- ----------
    12-4月 -13              2
    13-4月 -13              2
    14-4月 -13              2
    15-4月 -13              3
    16-4月 -13              3
    17-4月 -13              3
    18-4月 -13              3
    19-4月 -13              3
    20-4月 -13              3
    21-4月 -13              3
    22-4月 -13              4AA                     BB
    -------------- ----------
    23-4月 -13              4
    24-4月 -13              4
    25-4月 -13              4
    26-4月 -13              4
    27-4月 -13              4
    28-4月 -13              4
    29-4月 -13              5
    30-4月 -13              5已选择30行。
      

  2.   


    select to_date('2013-02-01', 'yyyy-MM-dd') + level - 1,
           CEIL((to_char(to_date('2013-02-01', 'yyyy-MM-dd'), 'd') + LEVEL - 1) / 7) 周
      from dual
    connect by level <= 28
    --
    TO_DATE('2013-         周
    -------------- ----------
    01-2月 -13              1
    02-2月 -13              1
    03-2月 -13              2
    04-2月 -13              2
    05-2月 -13              2
    06-2月 -13              2
    07-2月 -13              2
    08-2月 -13              2
    09-2月 -13              2
    10-2月 -13              3
    11-2月 -13              3
    12-2月 -13              3
    13-2月 -13              3
    14-2月 -13              3
    15-2月 -13              3
    16-2月 -13              3
    17-2月 -13              4
    18-2月 -13              4
    19-2月 -13              4
    20-2月 -13              4
    21-2月 -13              4
    22-2月 -13              4
    23-2月 -13              4
    24-2月 -13              5
    25-2月 -13              5
    26-2月 -13              5
    27-2月 -13              5
    28-2月 -13              5已选择28行。
      

  3.   

    17号到23号为第四周,24号到28号为第周把,
    PS:CSDN的论坛编辑器好难用啊,敲个字卡一下...
      

  4.   

    SQL> select week_no(sysdate) from dual;WEEK_NO(SYSDATE)
    ----------------
                   2
      

  5.   

    create or replace function week_no(t_date in date)
    return number
    is
    v_xq int;
    v_time date;
    v_day int;
    v_rq int;
    v_cnt int :=0;
    v_week int;
    begin
    --日期对应的星期和号
    select to_number(to_char(t_date,'d')) xq,to_number(to_char(t_date,'dd')) rq into v_xq,v_rq from dual;
    --判断从1号到当前日期有几个星期天
    for i in 1 .. v_rq 
    loop
        v_time:=to_date(to_char(t_date,'yyyymm')||i,'yyyymmdd');
       select to_number(to_char(v_time,'d')) into v_day from dual;
       
          if v_day =1  then 
             v_cnt :=v_cnt+1;
           end if;
    end loop;
    --如果输入的日期本身是星期天,则所在的周数,就是V_CNT,否则为V_CNT+1
    if v_xq =1 then
         v_week :=v_cnt;
    else
         v_week :=v_cnt+1;
    end if;
    return (v_week);
    end week_no;
    /
    用个函数去判断当天是属于当月的第几周,我只想到这个,函数如下,请参考,谢谢