我有一个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?
是否有可能?
感谢
我有一个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?
是否有可能?
感谢
我不知道我完全理解这个问题,但我假设,如果时间不小于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
根据时区,如果偏移需要与否。
我试过这个SQL并使用TO_CHAR(SYSTIMESTAMP,'HH24')来获得小时。 – user1468031
可以截断日期之前只是减去两小时。
select *
from table
where load_dt = trunc(sysdate - 2/24.0) ;
Oracle还支持- interval '2' hour
,但我老式的时候。
使用case语句来计算确定是否需要从sysdate中减去0或1的时间。取决于您是否需要考虑区域偏移量,您可以使用extract或to_char()https://community.oracle.com/thread/2422420?tstart=0来提取小时并检查它是否小于2 – xQbert
应该怎样在第二天00:00至00:30之间发生? – xQbert
表格的加载时间从早上2.点到00点(每30分钟运行一次)。当负载运行在这段时间(需要当天)时。当它运行在00到凌晨2点,它需要第二天,并创建重复 – user1468031