通过传递时间和时间来计算特定日期范围的标准工作时间

时间:2017-07-24 05:48:19

标签: sql oracle

我试图通过在特定日期范围之间传递时间和时间来计算标准工作时间。

我尝试了以下内容:

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;

0 个答案:

没有答案