2009-05-13 4 views
0

Мне нужно выбрать сущность, которая действительна в середине действительности другого объекта.Как выполнить арифметическую операцию на Oracle timestamps (в SQL)?

В упрощенном примере, я хочу сделать что-то вроде этого:

select 
    * 
from 
    o1, o2 
where 
    o1.from < (o2.to - ((o2.to - o2.from) /2)) 
    and 
    o1.to > (o2.to - ((o2.to - o2.from) /2)) 

Как я могу вычислить "(o2.to - ((o2.to - o2.from)/2))" в SQL, считая, что от и до есть временные метки?

+0

Очевидно, у меня была опечатка в моей местной версии, спасибо за открытие. – 2009-05-13 14:58:47

ответ

2

Вы попробовали то, что написали? Похоже, что он должен работать со мной:

(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 
Смежные вопросы