Oracle时间戳和current_date

时间:2015-06-04 23:04:13

标签: oracle timestamp

我有这个代码工作:

ixdtl.timestamp between
to_date('2015/06/03', 'YYYY/MM/DD')+ INTERVAL '03:0:0.0' HOUR TO SECOND 
  AND to_date('2015/06/03', 'YYYY/MM/DD')+ INTERVAL '1 2:59:59.99' DAY TO SECOND
    AND 
    (
     icrun.RUNDATE BETWEEN to_date('2015/06/03', 'YYYY/MM/DD')
     AND to_date('2015/06/03', 'YYYY/MM/DD')+ INTERVAL '1' DAY 
     )

但是现在,我需要使用变量current_date代替字符串'2015/06/03',以便ixdtl.timestamp在昨天凌晨3点到凌晨3点之间。此外,rundate需要是昨天或今天。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

CURRENT_DATE是当前日期和时间。如果您只想要日期部分,请使用TRUNC功能。

为了获得昨天凌晨3点和今天凌晨3点,从今天午夜到凌晨3点减去21小时可能更容易,今天午夜增加3小时到今天凌晨3点,并使用> = /<而不是BETWEEN

ixdtl.timestamp >= TRUNC(CURRENT_DATE) - INTERVAL '21' HOUR AND
ixdtl.timestamp < TRUNC(CURRENT_DATE) + INTERVAL '3' HOUR

对于今天和昨天,寻找&gt; =一天前&lt;明天。

ixdtl.RUNDATE >= TRUNC(CURRENT_DATE) - INTERVAL '1' DAY AND
ixdtl.RUNDATE < TRUNC(CURRENT_DATE) + INTERVAL '1' DAY

把它们放在一起,你得到:

WHERE ixdtl.timestamp >= TRUNC(CURRENT_DATE) - INTERVAL '21' HOUR
  AND ixdtl.timestamp < TRUNC(CURRENT_DATE) + INTERVAL '3' HOUR
  AND ixdtl.RUNDATE >= TRUNC(CURRENT_DATE) - INTERVAL '1' DAY
  AND ixdtl.RUNDATE < TRUNC(CURRENT_DATE) + INTERVAL '1' DAY

答案 1 :(得分:1)

您的谓词应为:

ixdtl.timestamp
  BETWEEN trunc(CURRENT_DATE) - INTERVAL '21' HOUR
  AND     trunc(CURRENT_DATE) + INTERVAL '3'  HOUR