2013-07-02 149 views
0

在07/01/2013 - 09/30/2013的日期範圍內,我如何在特定時間(從0500到0600小時)的SQL調用中說?SQL特定時間和特定日期範圍

我想使用MOPACTIVITY.MOPSTART字段。這個例子顯示了從07/01到09/30的所有內容。我只需要在同一日期範圍內從05:00到06:00的那些。

謝謝!

FROM MOPUSER.MOPACTIVITY 
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd hh24:mi') BETWEEN '2013-07-01 00:00:01' AND '2013-09-30 23:59:59' 
+1

這是一個時間戳還是一個預言? –

回答

3

做兩個比較,一個日期,一個用於時間:

FROM MOPUSER.MOPACTIVITY 
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd') BETWEEN '2013-07-01' AND '2013-09-30' and 
     TO_CHAR(MOPACTIVITY.MOPSTART, 'hh24:mi') BETWEEN '05:00' AND '05:59' 

您還可以簡化第二個條件,採用hour()

FROM MOPUSER.MOPACTIVITY 
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd') BETWEEN '2013-07-01' AND '2013-09-30' and 
     hour(MOPACTIVITY.MOPSTART) = 5 
+1

我不認爲在Oracle中有一個內置的'hour()'函數。 –

0

我怎麼做的。我更喜歡@Gordon Linoff的回答!這可能對MOPSTART利用索引(如果有的話)

SELECT MOPACTIVITY.MOPID , 
TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd hh24:mi') AS MOPSTART_DATE, 
TO_CHAR(MOPACTIVITY.MOPEND, 'yyyy-mm-dd hh24:mi') AS MOPEND_DATE, 
MOPACTIVITY.MOPCREATOR, 
MOPACTIVITY.MOPIMPLEMENTOR 
FROM MOPUSER.MOPACTIVITY 
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd') BETWEEN '2013-07-01' AND '2013-09-30' 
AND to_number(to_char(MOPACTIVITY.MOPSTART, 'sssss')) between 18000 and 21600 

Order by MOPACTIVITY.MOPID 
0

一種方法是這樣的:

WHERE 
    MOPACTIVITY.MOPSTART >= DATE '2013-07-01' 
    AND 
    MOPACTIVITY.MOPSTART < DATE '2013-09-30' + 1 
    AND 
    TO_CHAR(MOPACTIVITY.MOPSTART, 'HH24') = '05' 

這假定您要包含06:00 。