2016-06-11 38 views
1

我的表Mysql的<=被給予了錯誤的輸出

starttime | endtime | id 

10:30   11:30  1 
11:30   12:30  2 
14:30   16:30  3 
15:30   16:30  4 

如果我要選擇10:30的ID對12:30我用下面這個命令

select id 
from table 
where STR_TO_DATE(starttime,'%H:%i')>='10:30' and 
     STR_TO_DATE(endtime,'%H:%i')<='12:30'; 

這給了我只有身份證1,但不給我2,如果我改變12:30到12:40它給了我1 & 2.BUt我使用較少或相等,所以它應該給我這兩個ID的權利?爲什麼它不這樣工作?

回答

1

問題是您正在嘗試將日期對象與字符串進行比較。爲了精確,在下面的表達式

STR_TO_DATE(starttime,'%H:%i') >= '10:30' 

STR_TO_DATE返回日期,但'10:30'只是一個varchar(巧合看起來像一個時間)。如果你想繼續沿着這條道路,你要拋棄雙方使用STR_TO_DATE的比較:

SELECT id 
FROM table 
WHERE STR_TO_DATE(starttime,'%H:%i') >= STR_TO_DATE('10:30','%H:%i') AND 
     STR_TO_DATE(endtime,'%H:%i') <= STR_TO_DATE('12:30','%H:%i'); 

但長期的更好的辦法是讓你的starttimeendtime列,列DATETIMETIMESTAMP

SQLFiddle

+0

還有一個問題,假設有上表中的條目涵蓋2小時喜歡11:30至13:30在這種情況下,當我嘗試運行查詢與 STR_TO_DATE(開始時間,'%H:% i')> = STR_TO_DATE('12:30','%H:%i')AND STR_TO_DATE(endtime,'%H:%i')<= STR_TO_DATE('13:30','%H:%一世'); 它給出空集:( –

+0

@RajaDhasan仔細看看你的數據;沒有記錄開始時間是> = 12:30',結束時間是<= 13:30'。 –

+0

否否我的評論如上例如,我有一個條目id = 5 starttime = 11:30和endtime = 13:30(假設其他條目已被刪除) 現在,當我檢查10:30到12點之間的時間範圍: 30它應該返回上面的條目,但它不能這樣做 –