2016-08-11 3 views
0

私は多くの異なる日に特定の車両のための多くのデータを含むテーブルを持つMySQLデータベースを持っています。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 57time_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 
この表では日付が、データがそうのように撮影されたたこと time_stamp列が呼ばれています

私はSELECT * FROM table_name WHERE time_stamp LIKE 2016-08-09% AND UnitID LIKE 57;を試しましたが、unknown column in 'where clause'ということを教えてくれるError Code: 1054が続きます。私はまだ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%を囲むなかったことが、おそらくだった、言った:あなたのクエリは、このようなWHEREと良いだろう。

+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')のみを入力し、プログラムは2番目の日付を' + 1 'となる。これは、 '2016-08-31'のようなものが原因で発生し、' 2016-08-31'のように発行されません。もちろん、私は限界を設定して回避することができましたが、他の回答は実装が簡単でした。とにかく、ありがとう! – ThoseKind

1

私はあなたが探しているデータがTEXTVARCHAR、またはCHARデータではないので、あなたがこのクエリのLIKEが必要になるだろうとは思いません。あなたの述語でこれを試してみてください:

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

なんらかの理由で、私はこの文法を働かせることができませんでした。それは、 'time_stamp'の書式化がデータと時刻*ではなく、ちょうど日付であるためだと思います。私は他の人の答えから必要なものを得ましたが、いずれの方法でも応答に感謝します! – ThoseKind