|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
---------count working day between l_date_fr to l_date_to-------------------
declare
l_date_fr date := to_date('2009/01/01','yyyy/mm/dd');
l_date_to date := to_date('2009/01/09','yyyy/mm/dd');
l_count pls_integer;
begin
select count(*)
into l_count
from (select rownum -1 day_count
from all_objects ----------时间段内的天数不能超过表的总行数m,否则只统计m天中的working days
where rownum <= l_date_to - l_date_fr +1)
where to_char(l_date_fr + day_count, 'D') not in ('1', '7')
and to_char(l_date_fr + day_count,'yyyy/mm/dd') not in ('2009/01/26', '2009/01/27', '2009/01/28', '2009/01/29', '2009/01/30');
if l_date_to >= to_date('2009/01/24','yyyy/mm/dd') then
l_count := l_count + 1;
end if;
dbms_output.put_line(l_count);
end ;
这是我从网上搜索找到一个很简单的写法后,写的一个匿名块,用来求解某段特定时间内的working days。大家看红色的代码就可以了。其它的是我自己加的,用来统计我们公司一月的工作天数的。
我觉得这个方法很简单,而且很好用,有个缺点我已经标注出来。all_objects这个表大家可以换成你的数据库里面的其它表。 |
|