MySQLのLIKEクエリで「%」を含む列値を検索する方法【エスケープ処理の基本】
MySQLのLIKEクエリで「%」を含む値を検索するには?
MySQLでは、「%」はLIKE句におけるワイルドカードとして機能するため、そのまま検索することはできません。「%」という文字そのものを含む列値を検索したい場合は、バックスラッシュ(\)によるエスケープ処理が必要です。
基本構文
「%」を含む列値を検索する場合の構文は以下の通りです。
select * from yourTableName
where yourColumnName LIKE '\%%';
ポイントは、検索対象の「%」の直前に「\(バックスラッシュ)」を付けることです。これにより、ワイルドカードではなく通常の文字として扱われます。
実際にテーブルを作成して確認してみよう
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1497
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.55 sec)
次に、INSERT文を使ってレコードを挿入します。ここでは「%」が先頭または末尾に含まれるデータも登録しています。
mysql> insert into DemoTable1497 values('%JohnSmith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1497 values('DavidMiller');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1497 values('CarolTaylor%');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1497 values('%DavidMiller');
Query OK, 1 row affected (0.12 sec)SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select * from DemoTable1497;
実行結果は以下のようになります。
+--------------+
| Name |
+--------------+
| %JohnSmith |
| DavidMiller |
| CarolTaylor% |
| %DavidMiller |
+--------------+
4 rows in set (0.00 sec)
「%」を含むレコードをLIKEクエリで検索する
それでは、「%」という文字を含む列値をLIKEクエリで検索してみます。
mysql> select * from DemoTable1497
-> where Name LIKE '\%%';
実行すると、次の出力が得られます。
+--------------+
| Name |
+--------------+
| %JohnSmith |
| %DavidMiller |
+--------------+
2 rows in set (0.00 sec)
まとめ
この例では、先頭に「%」が含まれる2件のレコードだけが抽出されました。これは「'\%'」によって「%」がワイルドカードではなくリテラル文字として認識され、その後に続く「%」が任意の文字列にマッチするパターンとして機能したためです。
なお、末尾に「%」がある「CarolTaylor%」も検索対象に含めたい場合は、LIKE '%\%'のように記述します。また、SQLモードや設定によってはESCAPE句でエスケープ文字を明示的に指定することも可能なので、状況に応じて使い分けるとよいでしょう。
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実
-
JavaとMySQLでLIKE検索を使う際、検索変数の引用符を正しく記述する方法
JavaからMySQLに接続し、LIKE句で検索変数(キーワード)を使ったあいまい検索を行う場合、SQL文中の文字列を正しくシングルクォート()で囲むことが重要です。まず、検索変数を使ったLIKE句の正しい構文を見てみましょう。String sqlQuery; sqlQuery = select * from yourTableName where yourColumnName like % + yourSearchVariableName + %;それでは、実際にサンプルテーブルを作成して動作を確認していきます。サンプルテーブルの作成まず、テーブルを作成します。mysql> creat