我试图通过在特定日期范围之间传递时间和时间来计算标准工作时间。
我尝试了以下内容:
select trunc(hrs*24)||':'||ltrim(to_char(round((((hrs*24) - trunc(hrs*24))*60),2),'09'))
from (
select 8 * (to_date('1730','HH24:MI') - to_date('0900','HH24:MI')) hrs from dual
);
其中“8”是天数
但当我在其他天数工作正常8天时,它返回 67:60 。
它应该返回68:00,即总工作时间的68小时和00分钟,持续8天。
我该如何解决这个问题?
更新:
考勤系统中用于获取总标准小时数的实际方法:
create or replace FUNCTION GET_std_hrs (stdin IN VARCHAR2,stdout in VARCHAR2,from_dt in DATE,to_dt in date)
RETURN CHAR AS
--
hrs number;
--
BEGIN
--
select count(*) * (to_date(stdout,'HH24:MI') - to_date(stdin,'HH24:MI'))
into hrs
from olpcdc.calendar
where date_time_start between from_dt and to_dt
and to_char(date_time_start,'dy') not in ('sat','sun')
and not exists (select 1 from OLPCDC.HOLIDAYS
where trunc(date_time_start) between trunc(holiday_frmdt) and trunc(holiday_todt));
return(trunc(hrs*24)||':'||ltrim(to_char(round((((hrs*24) - trunc(hrs*24))*60),2),'09')));
--
END;