本帖最后由 imsasuke 于 2010-12-12 01:06:33 编辑

解决方案 »

  1.   


    --获取两个日期间的工作日
    select dt_time 
      from (select begindate + level - 1  dt_time
              from dual
           connect by level <= sysdate - begindate + 1
           )
     where to_char(dt_time,'d') not in ('1','7');
      

  2.   


    -- 获取两个日期间的工作日,SQL> select dt_time
      2    from (select to_date('01-12-2010 08:20:56','dd-mm-yyyy HH:MI:SS') + level - 1  dt_time
      3            from dual
      4         connect by level <= sysdate - to_date('01-12-2010 08:20:56','dd-mm-yyyy HH:MI:SS')  + 1
      5         )
      6   where to_char(dt_time,'d') not in ('1','7');DT_TIME
    -----------
    01-12-2010
    02-12-2010
    03-12-2010
    06-12-2010
    07-12-2010
    08-12-2010
    09-12-2010
    10-12-20108 rows selected结果好像和楼主要求相差,几天几小时,如:1天零2个小时的 工作日
    而不是就给出日期吧? 
    继续关注!
      

  3.   


       create or replace function f_work_day(beg_date in varchar2)
          return varchar2
       is
          r_v varchar2(200);
          v_n number(38,3);
          v_wek number;
       begin
          select current_date-to_date(beg_date,'yyyy-mm-dd HH24:MI:SS') into v_n from dual;
          select count(dt_time)  into v_wek
          from (select to_date(beg_date,'yyyy-mm-dd HH24:MI:SS') + level - 1  dt_time
                from dual
            connect by level <= current_date - to_date(beg_date,'yyyy-mm-dd HH24:MI:SS') + 1
           )
      where to_char(dt_time,'d') in ('1','7');
          r_v :='距离现在'||(trunc(v_n)-v_wek)||'天'||trunc((v_n-trunc(v_n))*24)||'小时'||trunc((v_n-trunc(v_n))*24-trunc((v_n-trunc(v_n))*24)*60)||'分钟';
          return r_v;
       end;
       
       
    declare
     v_b_date varchar2(30);
     v_str varchar2(200);
    begin
    v_b_date  :='2010-10-20 13:20:00';   ---定义你的开始时间把 
    select f_work_day(v_b_date) into v_str from dual;
    dbms_output.put_line(v_str);
    end;
      

  4.   

    select to_char(to_date(substr(to_char(sysdate,
    'YYYYMMDDHH24MISS'),0,8),
    'YYYYMMDD'),
    'DY DD MON YYYY',
    'nls_date_language=AMERICAN') from dual
    这个语句可以查询出来时间格式:TUE 14 DEC 2010---2010年12月14号 周二
    之后你可以截取出来前面3位就是星期。判断是否为周六sat或者周日sun.....
    其他剩下的就都不是问题了,相信你懂的...