起 止
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条记录,但这个效率实在是...
用游标,如果没有包含关系还好办,有了包含,头大...
期待高手...
------解决方案--------------------
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')