59

SQLクエリを実行しようとしています:

select * from table where column like '%value%';

しかし、データは 'Value' ( V は大文字 ) として保存されます。

このクエリを実行すると、行が取得されません。文字の大文字と小文字に関係なく「値」を検索するように呼び出すにはどうすればよいですか?

4

9 に答える 9

117

両方 (列と検索語) で LOWER 関数を使用します。そうすることで、クエリが %VaLuE% のようなものであっても、問題にならないことが保証されます。

select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');
于 2013-09-17T15:15:00.357 に答える
16

この列の大文字と小文字を区別しない場合:

ALTER TABLE `schema`.`table` 
CHANGE COLUMN `column` `column` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

したがって、クエリを変更する必要はありません。

また、MySQL エンジンは、lower() 関数やその他のトリックを使用するよりも高速にクエリを処理します。

また、より低い関数を使用することがインデックス検索のパフォーマンスの良い解決策になるかどうかはわかりません。

于 2013-09-17T15:15:08.263 に答える
15

テーブルで大文字と小文字を区別しない照合を使用するか、値を強制的に小文字にします。

WHERE lower(column) LIKE lower('%value%');
于 2013-09-17T15:09:51.637 に答える
7

lower()関数を使用します。

select t.*
from table t
where lower(column) like '%value%';
于 2013-09-17T15:08:31.753 に答える
6

大文字と小文字を区別しない照合を使用してみてください

select * from table
where column like '%value%' collate utf8_general_ci
于 2013-09-17T15:08:29.303 に答える
3

like を使用してフィールドを検索している間は、lowerまたはupper のいずれかの関数を使用して大文字と小文字を区別する必要があります。

select * from student where upper(sname) like 'S%';

また

select * from student where lower(sname) like 'S%';
于 2016-12-26T06:01:11.170 に答える