2014-03-31 269 views
0

我試圖顯示某些日期之間可用的數據。如果我在日期表中輸入確切的日期,它就會起作用。但是,當我輸入的日期大於或小於查詢不起作用(未選擇行)時。有人可以試着幫我指導這個問題嗎?謝謝...大於/小於或等於在Oracle/SQL Plus中不起作用

Dates 
Date_id StartDate EndDate 
    1  19-FEB-14 31-JUL-14 


SELECT FirstName, SecondName 
FROM Doctor, Available, Dates, DoctorType 
WHERE Available.available = 'YES' 
AND Type = '&Type' 
AND Dates.StartDate >= '&StartDate' 
AND Dates.EndDate <= '&EndDate'; 

進入19-FEB-14和31-JUL-14將工作。但是,如果我把20-FEB-14和30-JUL-14舉例,它不會取數據。

+3

可能是條件是'Dates.StartDate> ='&StartDate''但19-FEB-14'不大於或等於'20-FEB-14'? –

+0

我確實嘗試過,沒有日期格式。愚蠢的愚蠢錯誤 - 謝謝。 –

回答

2

假設date.StartDatedates.EndDate都是date類型,您的查詢將比較日期和字符串。這意味着您最終會得到字符串比較語義(即哪個字符串首次按字母順序排列)而不是日期比較語義(即哪個日期首先出現在日曆上)。爲了得到正確的語義,你需要日期比較日期

AND dates.StartDate >= to_date('&StartDate', 'DD-MON-RR') 
AND dates.EndDate <= to_date('&EndDate', 'DD-MON-RR') 

假設你也希望能夠在日期DD-MON-RR格式輸入。

+0

是的,它們都是日期類型。不幸的是仍然無法取得成功。 –

+1

@Devrim - Joachim在評論中指出,你的榜樣沒有道理。如果您輸入的日期晚於開始日期或早於結束日期,則您的邏輯正確排除它。操作員正在正常工作。也許你想扭轉操作符(> =而不是<=和<=而不是> =)? –