2017-10-07 502 views
0

我想顯示兩個範圍之間的行。這兩個範圍將是日期。一列存儲的日期在「2017年8月10日/上午05點」 格式的字符串爲了我使用下面的查詢來比較值:MySQL:無法正確比較字符串值作爲日期

SELECT * FROM `Game` WHERE (Home_School_Name = 'Paarl Boys' OR Away_School_Name = 'Paarl Boys') && Status = 'NOT STARTED' && STR_TO_DATE(LEFT(Start_Time,LOCATE(' ',Start_Time)),'%m-%d-%Y') BETWEEN '2017-8-10' AND '2017-15-10' 

現在有兩場比賽應該返回結果。 8-10-2017,9-10-2017。當我發送範圍爲2017-1-10和2017-8-10時,它顯示第一個遊戲。當我嘗試2017-8-10和2017-8-12。它顯示兩個遊戲。但是當我超過12時,它停止返回它們兩個。 我知道我傳遞的日期格式有問題。但我一直無法弄清楚。我也看到了類似的問題,但他們都沒有爲我工作。

任何幫助表示讚賞。

+1

你爲什麼不只是使用'DATE'或'DATETIME'數據類型? –

+0

我被賦予了這個結構。如果我改變它,一些報告將會中斷。 –

回答

0

你應該真的將日期/時間存儲爲datetime,而不是字符串。使用錯誤的數據類型會使後續工作變得更加困難。

的MySQL通常發生在ISO標準格式,YYYY-MM-DD日期常量,那麼試試這個:

SELECT g.* 
FROM `Game` g 
WHERE 'Paarl Boys' IN (Home_School_Name, Away_School_Name = 'Paarl Boys') AND 
     g.Status = 'NOT STARTED' & 
     STR_TO_DATE(LEFT(Start_Time, LOCATE(' ', Start_Time)), '%d-%m-%Y') BETWEEN '2017-10-08' AND '2017-10-15' 
+0

謝謝。你確實指向了正確的方向,但是我必須將STR_TO_DATE中的格式更改爲%d-%m-%Y。 –