我现在要做一个存储过程,用来统计几类事件,每个事件都有单独的统计时间,比如统计事件1的时间范围是统计月上个月的最后一个工作日向前推2个工作日,像这样的存储过程,该怎么写呢?o(︶︿︶)o 唉,头疼!

解决方案 »

  1.   

    我太菜,看不太懂
    根据你的题目,不能这样么,to_char(sysdate,'DAY')不是like('S%')开头的。
      

  2.   

    得看holiday 表是怎么建的啊,  如果holiday 表中都标记了每一天是工作日或假期,那处理就方便了
      

  3.   


    -- 测试数据 建立工作日维表  with tmp_work_tab as(
        select trunc(sysdate-5) workdate, '1' is_work -- 0 非工作日 1 工作日
                from dual union all
        select trunc(sysdate-4) , '1' from dual union all
        select trunc(sysdate-3) , '1' from dual union all
        select trunc(sysdate-2) , '0' from dual union all
        select trunc(sysdate-1) , '1' from dual)
      
    -- 查询 SQL  SELECT to_date('20110104','YYYYMMDD') - 2 - more_days "指定前2个工作日"
             ,to_date('20110104','YYYYMMDD') - 2 "指定前2天,包含非工作日"
          from
           (
          -- 非工作日的天数
           select COUNT(1) more_days -- to_date('20110104','YYYYMMDD') - 2
                  from tmp_work_tab
                  WHERE WORKDATE BETWEEN to_date('20110104','YYYYMMDD') - 2 AND to_date('20110104','YYYYMMDD')
                        AND IS_WORK = '0' 
                    );指定前2个工作日 指定前2天,包含非工作日
    --------------------------------------------------
    2011-1-1                 2011-1-2
    实现思路:指定前2天工作日 = 指定日期 - 2 天 - (非工作日的天数)
      

  4.   

    select to_char(sysdate,'D') from dual;
    可以求出某一天是一个星期中的第几天,注意是从星期天算起的.
    有这个就很好办了吧,7 1两天不是工作日,其它的都是.
      

  5.   

    if to_char(sysdate, 'DY', 'nls_date_language=american') in ('SAT', 'SUN') then ……