** 求一个 函数 计算有效处理时间 **
现有一个表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)
------解决方案--------------------
你就直接做个判断不就行了,判断时间是不是在8:30-18:00内不就行了,计算出来的事件再减去中午休息的时间,一天的工作时间不就有了。