2017-01-19 107 views
1

我試圖在兩個日期之間搜索數據,但它檢索的數據不在我給出的範圍內?好心指點我如何重新寫如下的查詢邏輯在oracle中的兩個時間戳之間搜索數據

select * 
from Users 
where TO_CHAR(Users.lastloggedindate,'dd-MON-yy HH.MI.SS') between '17-JAN-17 07.16.55' and 
                    '18-JAN-17 09.20.22'; 
+0

'lastloggedindate'的列類型是什麼? –

+0

數據類型是DATE – Muthusankar

+0

輸出:17-MAY-12 11.41.55 18-JAN-17 19.19.08 17-OCT-14 41年12月16日 18-JAN-17 20.21.15 17-SEP-08 10.16。 53 17-JUL-09 57年12月27日 18-FEB-13 08.00.48 18-APR-12 13.30.26 18-APR-12 13.32.28 17-NOV-15 15.41.07 17-JAN -17 09.44.25 17-JAN-17 21.15.28 18-APR-13 13.36.59 18-JAN-17 20.29.28 – Muthusankar

回答

2

嘗試使用to_date()代替to_char(),該範圍的兩分轉換成日期對抗,你的登錄日期可以進行比較:

select * 
from Users 
where Users.lastloggedindate between to_date('2017-17-01 07:16:55', 'YYYY-MM-DD HH24:MI:SS') and 
            to_date('2017-18-01 09:20:22', 'YYYY-MM-DD HH24:MI:SS'); 
+0

謝謝。它工作正常 – Muthusankar

+1

@Muthusankar要添加到蒂姆的答案,原來的查詢不能按預期工作的原因是因爲你比較字符串而不是日期。 '17 -JAN-17 07.16.55'的字符串將比'16 -JAN-10 06.31.13'的字符串大,因爲第一個字符不同於第二個字符,而7大於6.您可以通過比較'yyyy-mm-dd hh24:mi:ss'格式的字符串來解決這個問題,但是如果您比較兩種日期類型的東西,爲什麼不讓Oracle知道將它們作爲DATE進行比較(這是正是Tim的答案)而不是字符串。 – Boneist

+1

@Boneist現在我明白了,謝謝你的明確解釋。 – Muthusankar

相關問題