大文字小文字を区別しない SQL SELECT
クエリに関する FAQ です。 大文字小文字を無視して SQL SELECT
クエリを発行するにはどうすればよいのでしょうか
背景
私が初めて SQL クエリを書き始めたとき、私は Postgresql を使用しており、大文字小文字を区別しないクエリを実行するためにカスタム正規表現機能の一部を使用していました。 当時は良いアイデアだと思ったのですが、自分のアプリケーションを MySQL データベースに移行しようとしたときに、アプリケーションの一部が動作しなくなりました。
この悩みを解決するために、以下の例では、標準的な SQL 構文を使用して大文字小文字を区別しない SQL SELECT クエリを記述する方法を示します。
非常に重要な注意点
ここで紹介する方法について、非常に重要なことがあります。
これらのクエリは、データベースにテーブル スキャンを実行させます。 つまり、検索している列にインデックスがある場合、そのインデックスは使用されません。 つまり、テーブルに10億件のレコードがある場合、この方法では10億件のレコードをすべて検索することになります。
軽蔑的な言葉を使う人のコメントは掲載しませんが、ある人がコメントに書いていたように (侮辱の合間に)、「データの列全体を変換するために関数を使用すると、テーブル スキャンが必要になるので、
WHERE
節では避けるべきです」。”
Case insensitive SQL SELECT: 上位または下位の関数を使用する
大文字と小文字を区別しないクエリを実行する SQL 標準の方法は、次のように SQL の upper
lower
関数を使用することです:
select * from users where upper(first_name) = 'FRED';
または次のようになります。
select * from users where lower(first_name) = 'fred';
お分かりのように、パターンとしては、検索するフィールドを大文字または小文字にし、使用した SQL 関数に合わせて検索文字列も大文字または小文字にします。
SQL LIKE クエリ
同じテクニックを使って、SQL の LIKE
クエリでも大文字/小文字を区別しないようにできます。 ここでは、SQL LIKE
クエリで uppercase 関数を使用する方法を示します。
select * from users where lower(first_name) like '%al%';
Summary
これらの大文字小文字を区別しない SQL SELECT クエリの例が参考になれば幸いです。 繰り返しになりますが、SQL の upper and lower 関数を使用して検索対象を大文字または小文字に変換し、検索文字列をその大文字と小文字に一致させるのがコツです。