--获取两个日期间的工作日 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');
-- 获取两个日期间的工作日,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个小时的 工作日 而不是就给出日期吧? 继续关注!
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;
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..... 其他剩下的就都不是问题了,相信你懂的...
--获取两个日期间的工作日
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');
-- 获取两个日期间的工作日,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个小时的 工作日
而不是就给出日期吧?
继续关注!
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;
'YYYYMMDDHH24MISS'),0,8),
'YYYYMMDD'),
'DY DD MON YYYY',
'nls_date_language=AMERICAN') from dual
这个语句可以查询出来时间格式:TUE 14 DEC 2010---2010年12月14号 周二
之后你可以截取出来前面3位就是星期。判断是否为周六sat或者周日sun.....
其他剩下的就都不是问题了,相信你懂的...