2016-08-11 64 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