oracle sql sysdate

时间:2016-03-01 20:46:58

标签: sql oracle

所有

我有一个sql,就像下面在informatica lookup sql中使用的那样。

当时间是凌晨2点到凌晨00点时,

select * from table where load_dt = trunc(sysdate)

当时间在第二天00:30到凌晨2点之间时,相同的sql应该读作

select * from table where load_dt = trunc(sysdate-1)

如何在单个sql中创建这两个sql?

有可能吗?

感谢

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这个问题但是我假设如果小时不到凌晨2点,你想从sysdate中减去1,否则保持当前的sysdate。

你说过;凌晨2点到凌晨00点和凌晨00点到凌晨2点......但我将其解释如上。

Select * 
from table 
where load_Dt = trunc(sysdate - case 
   when TO_CHAR(SYSTIMESTAMP,'HH24') < 2 then 1 else 0 end)

Select * 
from table 
where load_Dt = trunc(sysdate - case 
   when EXTRACT(HOUR FROM SYSTIMESTAMP) < 2 then 1 else 0 end

取决于是否需要时区偏移。

答案 1 :(得分:0)

您可以在截断日期前减去两小时:

select *
from table
where load_dt = trunc(sysdate - 2/24.0) ;

Oracle也支持- interval '2' hour,但有时候我很老套。