怎样统计一天中的可用时长

Corn1 2014-03-10 02:52:34
起 止
08:00 09:00
10:00 10:30
10:10 11:00

这张表的意思是一天中不可用的起止时间。
根据这张表的值,我怎样用函数计算一天中的可用时间长度?
这些时间段可能会有交叉,或者包含关系(如:10:00-10:30 11:00-11:30 09:30-12:00)。

最笨的方法是用1440条记录,但这个效率实在是...
用游标,如果没有包含关系还好办,有了包含,头大...
期待高手...
...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
_拙计 2014-03-10
  • 打赏
  • 举报
回复
这都类似于 两日期之间的间隔日期,基本上都可以使用统一方法变换,connect by
流浪川 2014-03-10
  • 打赏
  • 举报
回复
WITH sj AS
(SELECT TO_CHAR(S_DT + (ROWNUM - 1) * 1 / 1440, 'hh24:mi') dd
   FROM (SELECT TO_DATE('00:00', 'hh24:mi') S_DT,
                TO_DATE('23:59', 'hh24:mi') E_DT
           FROM DUAL) T 
 CONNECT BY S_DT + (ROWNUM - 1) * 1 / 1440 <= E_DT)
SELECT COUNT(1) FROM sj WHERE 
not(dd>'08:00' AND dd<'09:00') AND 
not(dd>'10:00' AND dd<'10:30') AND 
not(dd>'10:10' AND dd<'11:20') 
流浪川 2014-03-10
  • 打赏
  • 举报
回复
使用下面的sql可以查出分钟集合,根据自己需要过滤求和不行么?
SELECT TO_CHAR(S_DT + (ROWNUM - 1) * 1 / 1440, 'hh24:mi')
   FROM (SELECT TO_DATE('00:00', 'hh24:mi') S_DT,
                TO_DATE('23:59', 'hh24:mi') E_DT
           FROM DUAL) T 
 CONNECT BY S_DT + (ROWNUM - 1) * 1 / 1440 <= E_DT;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧