oracle db 如何用一条sql查询2个时间之间的工作时间间隔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle db 如何用一条sql查询2个时间之间的工作时间间隔相关的知识,希望对你有一定的参考价值。
例如:正常工作时间是9:00-12:00 ; 14:00-18:00
给定2个时间11-09 16:30 --- 11-10 14:30
我要的结果是 11-09 16:30-18:00 = 1.5h
11-10 9:00-12:00 = 3h
11-10 14:00-14:30 = 0.5h
则这个工作时间间隔是5h ;
我的一个思路是将2个时间差再减去中间的非工作时间;
另一个思路是直接能将2个时间中间非工作时间扣掉;
但不会写,请高手指点啊!!!!
注:时间相减得到的应该是带有小数的。(这些是可以用case when语句搞定的,不过日期这块可能还需要调整,我仅仅靠想象是想不出来了,还要靠你自己试验)
如果是字符类型的,那么就用 to_date转一下,或者直接计算减法都可以,具体的判断和上面差不多。追问
的确是一种方法,感觉好复杂哦-_-!!!!
case 开始 when 9-12
case 结束 when 9-12
when 12-14
when 14-18
else
end
when 12-14
。。
when 14-18
。。
else
。。
end
错了,不是这么写的是一个case when
类似
select case when 开始时间 14-18 and 结束时间 9-12 and 结束时间-开始时间>1 then (结束时间-开始时间)*24-trunc(结束时间-开始时间)*17+2 when 开始时间 14-18 and 结束时间 9-12 and 结束时间-开始时间<1 then (结束时间-开始时间)*24-15 else (结束时间-开始时间)*24-trunc(结束时间-开始时间)*17 end
dayBetween -1则为中间完整工作的天数,计时:(dayBetween -1)*7,
再加上开始时间(dataTime1)与当天结束时间的间隔以及结束时间与结束那天开始时间的间隔追问
例子给出的是比较好算的情况,如果开始时间在早上或者结束时间在早上,你的方法都没有扣掉中午的时间,还有更特殊的是开始时间,结束时间都有可能不是工作时间,我自己觉得是还有不少情况要考虑,所以如果需要满足条件的语句会好复杂!
有没有简单的实现方法呢?
如何用一条SQL语句对比两个表的数据是不是一致
参考技术A select * from a minus select * from b如果有数据,不一致,无,一致本回答被提问者采纳
以上是关于oracle db 如何用一条sql查询2个时间之间的工作时间间隔的主要内容,如果未能解决你的问题,请参考以下文章