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个时间中间非工作时间扣掉;
但不会写,请高手指点啊!!!!

你的时间保存数据类型是什么?date么?如果是date,判断时间点所属范围,如果开始时间属于14-18,结束时间属于9-12,并且时间相减的结果大于1,那么就可以得到结果为,时间相减(得到答案为天)*24-时间相减取整数(trunc)*17+2,如果如果开始时间属于14-18,结束时间属于9-12,并且时间相减的结果小于1,那么结果为,时间相减(得到答案为天)*24-15,其他情况均为时间相减(得到答案为天)*24-时间相减取整数(trunc)*17。
注:时间相减得到的应该是带有小数的。(这些是可以用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

参考技术A 先算两个日期相隔几天,记为dayBetween(日期相减);
dayBetween -1则为中间完整工作的天数,计时:(dayBetween -1)*7,
再加上开始时间(dataTime1)与当天结束时间的间隔以及结束时间与结束那天开始时间的间隔追问

例子给出的是比较好算的情况,如果开始时间在早上或者结束时间在早上,你的方法都没有扣掉中午的时间,还有更特殊的是开始时间,结束时间都有可能不是工作时间,我自己觉得是还有不少情况要考虑,所以如果需要满足条件的语句会好复杂!
有没有简单的实现方法呢?

如何用一条SQL语句对比两个表的数据是不是一致

参考技术A select * from a minus select * from b

如果有数据,不一致,无,一致本回答被提问者采纳

以上是关于oracle db 如何用一条sql查询2个时间之间的工作时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

DB2 如何用sql语句查看表结构

SQL如何用一条SQL语句更新表行

如何用sql语句查询mongo db数据库

如何用SQL SERVER取分组数据第一条

如题:如何用一条SQL语句按输入的参数进行判断执行查询数据

如何用把Oracle中的数据插入到sqlserver中?