2016-08-11 68 views
0

我有一個MySQL數據庫,裏面有一張表,其中包含許多不同日期的特定車輛的大量數據。在這個表中有一個名爲time_stamp列有數據取自像這樣的日期:我要選擇表中的一切都在那裏UnitID LIKE 57time_stamp LIKE 2016-08-09%,這樣它會返回SELECT all_data WHERE value_in_column LIKE specific_string

ID UnitID time_stamp   data more_data 
0 56  2016-08-10 12:01 asdf 12 
1 57  2016-08-09 11:19 ghjk 34 
2 57  2016-08-09 9:35 qwer 56 
3 58  2016-08-09 1:16 tyui 78 

ID UnitID time_stamp   data more_data 
1 57  2016-08-09 11:19 ghjk 34 
2 57  2016-08-09 9:35 qwer 56 

我試過SELECT * FROM table_name WHERE time_stamp LIKE 2016-08-09% AND UnitID LIKE 57;,但我不斷收到Error Code: 1054告訴我,有一個unknown column in 'where clause'。我對MySQL仍然很陌生,但我通常可以通過MySQL Docs的幫助找出我需要做的事情,但是我無法弄清楚這一點。我也尋找類似的問題,如this one here,但我沒有找到能夠完成我想要的東西。

回答

2

LIKE用於字符串匹配,因此與更合適的操作符相比,這樣比較慢。您的查詢將是一個更好的地方像這樣:

WHERE UnitID = 57 AND time_stamp BETWEEN '2016-08-09 00:00:00' AND '2016-08-09 23:59:29' 

也就是說,MySQL的主要反對你有查詢可能是你沒有用引號括2016-08-09%

+0

完美地工作,謝謝!我選擇了這一個,因爲它正在被實現到一個程序中,並且在指定日期之後的'time'沒有改變時更容易實現。而作爲一方,我沒有'2016-08-09%'在引號中,但我使用「'」作爲引號,並使用堆棧溢出輸入格式化。 – ThoseKind

+0

啊,是啊''''會讓MySQL期望你有一個名爲**'2016-08-09%'的字段**。 – Uueerdo

1

這裏您不需要LIKE條款。試試這個:

SELECT * FROM table_name 
WHERE 
time_stamp >= Convert(datetime,'2016-08-09') 
AND 
time_stamp < Convert(datetime,'2016-08-10') 
AND 
UnitID = 57 
+0

這個答案也適用,但由於日期格式化,實現起來會比較困難,因爲用戶只輸入第一個日期,在這種情況下爲'2016-08-09',程序將不得不爲第二個日期增加'+ 1'。這會導致和問題像'2016-08-31',因爲沒有'2016-08-32'。當然,我可以設置限制並解決它,但其他答案更容易實現。不管怎麼說,多謝拉! – ThoseKind

1

我不認爲你會需要LIKE此查詢,因爲你正在尋找的數據不是TEXTVARCHARCHAR數據。嘗試在你的謂詞中這樣做:

WHERE UnitID = 57 AND DATE(time_stamp) = '2016-08-09' 
+0

出於某種原因,我無法得到這個語法的工作,我想這是因爲'time_stamp'的格式是一個數據和時間*而不僅僅是一個日期。我從別人的答案中得到了我所需要的,但無論哪種方式,都要感謝您的回覆! – ThoseKind