日期:2014-05-17  浏览次数:20940 次

** 求一个 函数 计算有效处理时间 **
现有一个表aaaa 其中 e 是起始时间(包含日期),f 是终止时间(包含日期)要求 求出从起始时间到终止时间具体是多长时间,具体到小时,下班时间不包括在内,每天8:30上班,18点下班,多谢! 
处理时长:关闭时间-发起时间(只计营业时间:8:30-18:00),单位:小时;7.5小时工作时长,中午2小时的休息时间12:00到14:00 。 
如: 

发起时间:2012-12-13 15:40 -- 13号处理时长=15:40 - 8:30 - 2小时(中午午休) 
关闭时间:2012-12-16 15:30 -- 16号处理时长=15:30 - 8:30 - 2小时(中午午休) 

总时长=5.1小时 + 2*7.5(14,15号处理时长) + 5小时 

求一个通用的 函数 来实现该功能
------解决方案--------------------
使用round(to_number(开始时间-结束时间)*24)这个计算的是小时(四舍五入)
------解决方案--------------------
select (enddd - startdd) * 27000 + (starth - 8) * 3600 + (endh - 8) * 3600 +
       (startm - 30) * 60 + (endm - 30) * 60 as resulttime
  from (select to_char(to_date(startdate, 'yyyy-mm-dd hh24:mi'), 'dd') as startdd,
               to_char(to_date(startdate, 'yyyy-mm-dd hh24:mi'), 'hh24') as starth,
               to_char(to_date(startdate, 'yyyy-mm-dd hh24:mi'), 'mi') as startm,
               to_char(to_date(enddate, 'yyyy-mm-dd hh24:mi'), 'dd') as enddd,
               to_char(to_date(enddate, 'yyyy-mm-dd hh24:mi'), 'hh24') as endh,
               to_char(to_date(enddate, 'yyyy-mm-dd hh24:mi'), 'mi') as endm
          from test)

------解决方案--------------------
引用:
引用:
使用round(to_number(开始时间-结束时间)*24)这个计算的是小时(四舍五入)
你好,可能我没有说清楚。要求是只计营业时间:8:30-18:00内,营业时间之外的时间不计。


你就直接做个判断不就行了,判断时间是不是在8:30-18:00内不就行了,计算出来的事件再减去中午休息的时间,一天的工作时间不就有了。