SQLクエリを実行しようとしています:
select * from table where column like '%value%';
しかし、データは 'Value' ( V は大文字 ) として保存されます。
このクエリを実行すると、行が取得されません。文字の大文字と小文字に関係なく「値」を検索するように呼び出すにはどうすればよいですか?
SQLクエリを実行しようとしています:
select * from table where column like '%value%';
しかし、データは 'Value' ( V は大文字 ) として保存されます。
このクエリを実行すると、行が取得されません。文字の大文字と小文字に関係なく「値」を検索するように呼び出すにはどうすればよいですか?
両方 (列と検索語) で LOWER 関数を使用します。そうすることで、クエリが %VaLuE% のようなものであっても、問題にならないことが保証されます。
select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');
この列の大文字と小文字を区別しない場合:
ALTER TABLE `schema`.`table`
CHANGE COLUMN `column` `column` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
したがって、クエリを変更する必要はありません。
また、MySQL エンジンは、lower() 関数やその他のトリックを使用するよりも高速にクエリを処理します。
また、より低い関数を使用することがインデックス検索のパフォーマンスの良い解決策になるかどうかはわかりません。
テーブルで大文字と小文字を区別しない照合を使用するか、値を強制的に小文字にします。
WHERE lower(column) LIKE lower('%value%');
lower()
関数を使用します。
select t.*
from table t
where lower(column) like '%value%';
大文字と小文字を区別しない照合を使用してみてください
select * from table
where column like '%value%' collate utf8_general_ci
like を使用してフィールドを検索している間は、lowerまたはupper のいずれかの関数を使用して大文字と小文字を区別する必要があります。
select * from student where upper(sname) like 'S%';
また
select * from student where lower(sname) like 'S%';