0

我需要选择一个在不同实体的有效期中间有效的实体。

作为一个简化的例子,我想做这样的事情:

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

假设 to 和 from 是时间戳,我如何在 SQL 中计算“(o2.to - ((o2.to - o2.from) /2) )”?

4

1 回答 1

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
于 2009-05-13T14:07:18.623 回答