Oracle 时间戳和 current_date
Oracle timestamp and current_date
我的代码有效:
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 点之间。另外,运行日期必须是昨天或今天。
我该怎么做?
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
您的谓词应为:
ixdtl.timestamp
BETWEEN trunc(CURRENT_DATE) - INTERVAL '21' HOUR
AND trunc(CURRENT_DATE) + INTERVAL '3' HOUR
我的代码有效:
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 点之间。另外,运行日期必须是昨天或今天。
我该怎么做?
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
您的谓词应为:
ixdtl.timestamp
BETWEEN trunc(CURRENT_DATE) - INTERVAL '21' HOUR
AND trunc(CURRENT_DATE) + INTERVAL '3' HOUR