MySQLで特定の文字列を含む行をSELECTする方法(LIKE句の使い方)
MySQLで特定の文字列を含む行を抽出したい場合は、SELECT文とLIKE句を組み合わせて使用します。この記事では、基本的な構文から実際の使用例まで、わかりやすく解説します。
基本構文
カラム内に指定した文字列が含まれる行を検索するには、以下のような構文を使用します。
SELECT * FROM テーブル名 WHERE カラム名 LIKE '%パターン%';
ここで重要なのが、ワイルドカード「%」です。「%」は0文字以上の任意の文字列を表すため、「'%Jo%'」のように指定すると、文字列の途中に「Jo」が含まれるすべての行にマッチします。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。以下のクエリでテーブルを作成できます。
mysql> create table PatternDemo -> ( -> Id int, -> Name varchar(100), -> Age int -> ); Query OK, 0 rows affected (0.97 sec)
テストデータの挿入
次に、INSERT文を使ってレコードを挿入します。
mysql> insert into PatternDemo values(1,'James',23); Query OK, 1 row affected (0.11 sec) mysql> insert into PatternDemo values(2,'Joseph',21); Query OK, 1 row affected (0.18 sec) mysql> insert into PatternDemo values(3,'Robert',20); Query OK, 1 row affected (0.11 sec) mysql> insert into PatternDemo values(4,'John',26); Query OK, 1 row affected (0.10 sec) mysql> insert into PatternDemo values(5,'Richard',24); Query OK, 1 row affected (0.17 sec)
登録データの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select *from PatternDemo;
実行結果は以下の通りです。
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 1 | James | 23 | | 2 | Joseph | 21 | | 3 | Robert | 20 | | 4 | John | 26 | | 5 | Richard | 24 | +------+---------+------+ 5 rows in set (0.00 sec)
LIKE句で部分一致検索を実行する
それでは、Nameカラムに「Jo」という文字列を含む行だけを抽出してみましょう。以下のクエリを実行します。
mysql> select *from PatternDemo where Name like '%Jo%';
実行結果は以下の通りです。
+------+--------+------+ | Id | Name | Age | +------+--------+------+ | 2 | Joseph | 21 | | 4 | John | 26 | +------+--------+------+ 2 rows in set (0.00 sec)
LIKE句のパターン指定バリエーション
ワイルドカードの配置によって、検索の挙動が変わります。主なパターンは以下の3つです。
- '%文字列%':前後に任意の文字がある場合にマッチ(中間一致)
- '文字列%':指定した文字列で始まる場合にマッチ(前方一致)
- '%文字列':指定した文字列で終わる場合にマッチ(後方一致)
例えば、「'Jo%'」と指定すれば「Joseph」や「John」など「Jo」で始まる名前にのみマッチし、「'%ph'」と指定すれば「Joseph」のように「ph」で終わる名前にマッチします。
まとめ
MySQLで特定の文字列を含む行を検索するには、WHERE句とLIKE句、そしてワイルドカード「%」を活用します。部分一致・前方一致・後方一致を使い分けることで、柔軟な文字列検索が可能になります。なお、大規模なテーブルに対して先頭に「%」を付けた中間一致検索を行うとインデックスが利用されずパフォーマンスが低下する場合があるため、実運用では注意が必要です。
-
MySQLのWHERE句で日付の差を計算して行を抽出する方法(TIMESTAMPDIFFの使い方)
MySQLでは、TIMESTAMPDIFF() 関数を使うことで、日時同士の差分を計算し、その結果に基づいてWHERE句で行を絞り込むことができます。ここでは、指定した日時との差が5分以内のレコードを抽出する例を紹介します。サンプルテーブルの作成まず、datetime型のカラムを持つテーブルを作成しましょう。mysql> create table demo42 -> ( -> start_date datetime -> ); Query OK, 0 rows affected (0.77 sec)テーブルへのデータ挿入次に、INSERT文を使っていくつかの日時データを
-
MySQLでカンマ区切りの文字列から特定の値を検索・選択する方法
カンマ区切りで保存された文字列の中に、特定の値が含まれているかを確認して行を抽出したい場合があります。そのようなときは、MySQLの FIND_IN_SET() 関数を使用すると便利です。FIND_IN_SET() は、第1引数に検索したい文字列、第2引数にカンマ区切りの文字列を指定し、見つかった位置(1始まり)を返します。見つからない場合は0が返されるため、「0より大きい」という条件と組み合わせることで、該当するレコードだけを取得できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo81 -> ( ->