Как выполнить арифметическую операцию с отметками времени Oracle (в SQL)? - PullRequest
0 голосов
/ 13 мая 2009

Мне нужно выбрать объект, который действителен в середине срока действия другого объекта.

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

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, если предположить, что время от и до является метками времени?

1 Ответ

2 голосов
/ 13 мая 2009

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

(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...