function get_hours(p_date1 date, p_date2 date) return number is
l_return NUMBER;
l_date1 date;
l_date2 date;
l_days NUMBER; --天数
l_week_days NUMBER :=0; --周末天数
begin
--开始时间小于8点
if p_date1 < trunc(p_date1) + 1 / 3 then
l_date1 := trunc(p_date1) + 1 / 3;
--开始时间大于17点
elsif p_date1 > trunc(p_date1) + 17 / 24 then
l_date1 := trunc(p_date1) + 4 / 3;
else
l_date1 := p_date1;
end if;
--当天的
if p_date2 <= l_date1 then
l_return := round((p_date2 - p_date1) * 24, 2);
--没有超过一天
elsif p_date2 - l_date1 < 1 then
l_return := round((p_date2 - l_date1) * 24, 2);
--超过一天
else
l_days := trunc( p_date2 - l_date1);
for i in 1.. l_days loop
if to_char(p_date2-i,'d') in ('1','7') then
l_week_days := l_week_days +1;
end if;
end loop;
l_return := round((floor(p_date2 - l_date1)-l_week_days) * 8 +
(p_date2 - (l_date1 + floor(p_date2 - l_date1))) * 24,
2);
end if;
return l_return;
EXCEPTION
WHEN OTHERS THEN
return 0;
end;
计算2个日期之间的小时数,只算工作日,排除周末
最新推荐文章于 2022-12-30 17:34:22 发布