【问题标题】:Oracle timestamp and current_dateOracle 时间戳和 current_date
【发布时间】:2015-06-04 23:04:12
【问题描述】:

我有这个代码工作:

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 点之间。此外,运行日期必须是昨天或今天。

我该怎么做?

【问题讨论】:

    标签: oracle timestamp


    【解决方案1】:

    CURRENT_DATE 是当前日期和时间。如果您只需要日期部分,请使用TRUNC 函数。

    要获得昨天凌晨 3 点和今天凌晨 3 点,可能更容易从今天午夜减去 21 小时得到昨天凌晨 3 点,在今天午夜加上 3 小时得到今天凌晨 3 点,然后使用 >= / BETWEEN

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

    对于今天和昨天,查找 >= 一天前和

    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
    

    【讨论】:

      【解决方案2】:

      你的谓词应该是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 2021-08-28
        • 1970-01-01
        • 2014-02-23
        相关资源
        最近更新 更多