2013-07-29 55 views
0

這會給我的時間範圍從昨天晚上10點(2200小時)到今天上午8點(0800小時)?需要時間範圍之間使用SYSDATE

WHERE MOPACTIVITY.MOPSTART between (trunc(sysdate-1) + 22/24) and (trunc(sysdate) + 08/24) 
+0

'+ 22/24'和'+ 08/24'?你正試圖添加除法操作的結果? 0.916666666和0.333333? –

+2

是的,會的。你爲什麼不打印它並檢查一下自己? – Noel

+0

@MarcB,從午夜開始,Oracle從1.0小時開始的24小時內處理。所以12pm是+0.5,上午6點是+0.25,接下來的午夜是+1.0等,所以你可以做+22/24例如得到晚上10點。甚至+10/24/60添加10分鐘;或+10/24/60/60增加10秒。 –

回答

3

這是微不足道的,看看有什麼範圍,讓您用一個簡單的查詢:雖然

alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'; 

select trunc(sysdate-1) + 22/24, trunc(sysdate) + 08/24 from dual; 

TRUNC(SYSDATE-1)+22 TRUNC(SYSDATE)+08/2 
------------------- ------------------- 
2013-07-28 22:00:00 2013-07-29 08:00:00 

兩點意見。 (1)雖然使用分數的時間偏移是罰款,這可能是一個更清晰一點使用interval literals

select trunc(sysdate-1) + interval '22' hour, 
    trunc(sysdate) + interval '8' hour 
from dual; 

TRUNC(SYSDATE-1)+IN TRUNC(SYSDATE)+INTE 
------------------- ------------------- 
2013-07-28 22:00:00 2013-07-29 08:00:00 

和(2)between是包容性的,所以如果你拆分日成「轉變'你有可能將記錄的數據記錄在08:00兩次,這可能不是你想要的。爲避免重疊,您可以將其更改爲:

WHERE MOPACTIVITY.MOPSTART >= trunc(sysdate-1) + interval '22' hour 
AND MOPACTIVITY.MOPSTART < trunc(sysdate) + interval '8' hour 
+0

謝謝@Alex Poole!你會怎麼說0830? –

+1

@JonathanMorningstar - 'trunc(sysdate)+ interval'8:30'hour to minute'。一旦你離開整個小時,在我看來,間隔語法變得比添加幾分之幾更乾淨。 –

+0

再次感謝@亞歷Poole! –