2016-03-01 92 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,但我老式的時候。