2016-08-11 3 views
0

У меня есть база данных MySQL с таблицей, которая содержит много данных для определенного транспортного средства в разные дни. В этой таблице есть столбец с названием time_stamp, который имеет дату, когда данные были приняты, как так: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 

Я хочу, чтобы выбрать все, что в таблице, где UnitID LIKE 57 и time_stamp LIKE 2016-08-09% так, что возвращение будет:

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, такие как это:

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

Работает отлично, спасибо! Я выбрал это, потому что он внедряется в программу, и его проще реализовать, когда «время» после указанной даты не изменяется. И как сторона, у меня не было '2016-08-09%' в кавычках, но я использовал «' »в качестве котировок и что беспорядок с форматированием ввода Stack Overflow. – 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 для этого запроса, так как данные, которые вы ищете не TEXT, VARCHAR или CHAR данных. Попробуйте сделать это в своем предикате:

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

По какой-то причине я не мог заставить этот синтаксис работать, и я думаю, что это из-за того, что форматирование 'time_stamp' является данными и временем * не * просто датой. Я получил то, что мне нужно от других ответов, но в любом случае благодарю вас за ответ! – ThoseKind