MySQLのLIKE句でユーザー変数を使う方法をわかりやすく解説
MySQLでは、CONCAT()関数を組み合わせることで、LIKE句の中でユーザー変数を利用できます。検索キーワードを動的に変更したい場合などに非常に便利なテクニックです。
基本構文
まず、ユーザー変数に検索したい値をセットし、その変数をCONCAT()関数で「%」と連結してLIKE句に渡します。構文は以下の通りです。
SET @anyVariableName = 'anyValue';
SELECT yourColumnName1, yourColumnName2, yourColumnName3, ...N
FROM yourTableName
WHERE yourColumnName LIKE CONCAT('%', @anyVariableName, '%');
サンプルテーブルの作成
それでは、実際に動きを確認するためにテーブルを作成してみましょう。以下のクエリで「UserVariableInLike」というテーブルを作成します。
mysql> CREATE TABLE UserVariableInLike
-> (
-> id INT,
-> Name VARCHAR(100),
-> Age INT
-> );
Query OK, 0 rows affected (0.83 sec)
テストデータの挿入
次に、INSERT文を使ってレコードを挿入します。
mysql> INSERT INTO UserVariableInLike VALUES(101, 'John', 23);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO UserVariableInLike VALUES(102, 'John Smith', 24);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO UserVariableInLike VALUES(103, 'Carol Smith', 23);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO UserVariableInLike VALUES(104, 'Johnson', 25);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO UserVariableInLike VALUES(105, 'Adam Smith', 26);
Query OK, 1 row affected (0.21 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM UserVariableInLike;
実行結果は以下の通りです。
+------+-------------+------+
| id | Name | Age |
+------+-------------+------+
| 101 | John | 23 |
| 102 | John Smith | 24 |
| 103 | Carol Smith | 23 |
| 104 | Johnson | 25 |
| 105 | Adam Smith | 26 |
+------+-------------+------+
5 rows in set (0.00 sec)
LIKE句でユーザー変数を使った検索
それでは、実際にLIKE句でユーザー変数を使ってみます。まず変数@searchNameに「John」という値をセットし、あいまい検索を実行します。
mysql> SET @searchName = 'John';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT id, Name, Age FROM UserVariableInLike
WHERE Name LIKE CONCAT('%', @searchName, '%');
実行結果は以下の通りです。
+------+------------+------+
| id | Name | Age |
+------+------------+------+
| 101 | John | 23 |
| 102 | John Smith | 24 |
| 104 | Johnson | 25 |
+------+------------+------+
3 rows in set (0.05 sec)
解説のポイント
この結果から、「John」を含む3件のレコード(John、John Smith、Johnson)が抽出されていることがわかります。ポイントは以下の通りです。
1. 変数の宣言と代入: SET @変数名 = 値; の形式で、セッション単位のユーザー変数を定義できます。
2. CONCAT()でのワイルドカード連結: LIKE句のパターンは文字列として評価されるため、CONCAT('%', @searchName, '%')のように変数の前後に「%」を連結することで、部分一致検索が実現できます。
3. 動的な検索条件: 変数の値を変えるだけで検索条件を柔軟に変更できるため、ストアドプロシージャやアプリケーションからの動的クエリにも応用できます。
このように、CONCAT()関数を活用すれば、LIKE句でもユーザー変数を問題なく扱うことができます。検索条件を動的に切り替えたいケースでぜひ活用してください。
-
MySQLのLIKEクエリで「%」を含む列値を検索する方法【エスケープ処理の基本】
MySQLのLIKEクエリで「%」を含む値を検索するには?MySQLでは、「%」はLIKE句におけるワイルドカードとして機能するため、そのまま検索することはできません。「%」という文字そのものを含む列値を検索したい場合は、バックスラッシュ(\)によるエスケープ処理が必要です。基本構文「%」を含む列値を検索する場合の構文は以下の通りです。select * from yourTableNamewhere yourColumnName LIKE \%%;ポイントは、検索対象の「%」の直前に「\(バックスラッシュ)」を付けることです。これにより、ワイルドカードではなく通常の文字として扱われます。実際に
-
MySQLクエリでLIKE句を2回使う方法|OR条件で複数パターンを検索する
MySQLでは、LIKE句を1つのクエリ内で2回以上使用することで、複数のパターンに一致するレコードを柔軟に抽出できます。この記事では、実際にテーブルを作成し、LIKE句を2回組み合わせた検索クエリの書き方を手順を追って解説します。 1. サンプルテーブルを作成する まず、検索対象となるテーブルを作成します。 mysql> create table DemoTable2009 ( Name varchar(20) ); Query OK, 0 rows affected (0.51 sec) 2. テーブルにレコードを挿入する INSERT文を使って、いくつかの名前データを登録し