2016-03-01 121 views
0

全部,oracle sql sysdate

我有一个SQL,就像下面用于informatica查找sql​​。

select * from table where load_dt = trunc(sysdate)时,时间是凌晨2点到上午12点

当时间是上午02时○○nextday上午12时30分之间,相同的SQL应

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

看我怎样才能让这两个SQL单一的SQL?

是否有可能?

感谢

+0

使用case语句来计算确定是否需要从sysdate中减去0或1的时间。取决于您是否需要考虑区域偏移量,您可以使用extract或to_char()https://community.oracle.com/thread/2422420?tstart=0来提取小时并检查它是否小于2 – xQbert

+0

应该怎样在第二天00:00至00:30之间发生? – xQbert

+0

表格的加载时间从早上2.点到00点(每30分钟运行一次)。当负载运行在这段时间(需要当天)时。当它运行在00到凌晨2点,它需要第二天,并创建重复 – user1468031

回答

0

我不知道我完全理解这个问题,但我假设,如果时间不小于2我想从SYSDATE减去1,否则保持当前SYSDATE。

你说的;凌晨2点至凌晨00点,凌晨00点30分至凌晨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 

根据时区,如果偏移需要与否。

+0

我试过这个SQL并使用TO_CHAR(SYSTIMESTAMP,'HH24')来获得小时。 – user1468031

0

可以截断日期之前只是减去两小时。

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

Oracle还支持- interval '2' hour,但我老式的时候。