Вы пробовали то, что написали? Похоже, это должно работать для меня:
(o2.to - o2.from)
Это даст вам частичную разницу в днях, например:
1 select (trunc(sysdate) - trunc(sysdate+1))/2 from dual
2*
SQL> /
(TRUNC(SYSDATE)-TRUNC(SYSDATE+1))/2
-----------------------------------
-.5
SQL>
Затем, если вы добавите этот результат к исходной дате, вы получите дату и время в средней точке:
SQL> select to_char(a.d, 'YYYY-MON-DD HH24:MI')
2 from
3 ( select trunc(sysdate) + (trunc(sysdate+1) - trunc(sysdate))/2 d from dual
4 ) a;
TO_CHAR(A.D,'YYYY
-----------------
2009-MAY-13 12:00