MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでREGEXP(正規表現)を使って特定の単語を検索する方法

MySQLでは、REGEXP演算子(正規表現)を使用することで、文字列の中から特定の単語やパターンを柔軟に検索できます。LIKE句よりも複雑な条件指定が可能なため、部分一致や文中の任意の位置にある単語を正確に探したい場合に非常に便利です。

サンプルテーブルの作成

まず、検索対象となるテーブルを作成しましょう。

mysql> create table DemoTable
    -> (
    -> Title varchar(255)
    -> );
Query OK, 0 rows affected (1.82 sec)

レコードの挿入

次に、INSERTコマンドを使ってテーブルにデータを追加します。あわせて、全文検索用のFULLTEXTインデックスも追加しています。

mysql> insert into DemoTable values('John is a good player');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('No,John Doe is not a good player');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Yes,Adam Smith is play cricket match');
Query OK, 1 row affected (0.28 sec)
mysql> alter table DemoTable add fulltext(Title);
Query OK, 0 rows affected, 1 warning (10.60 sec)
Records: 0 Duplicates: 0 Warnings: 1

登録されたデータの確認

SELECT文を実行して、テーブル内のすべてのレコードを確認してみましょう。

mysql> select *from DemoTable;

上記のクエリを実行すると、以下のような結果が表示されます。

+--------------------------------------+
| Title                                |
+--------------------------------------+
| John is a good player                |
| No,John Doe is not a good player     |
| Yes,Adam Smith is play cricket match |
+--------------------------------------+
3 rows in set (0.00 sec)

REGEXPで特定の単語を検索する

ここからが本題です。「John」という単語を含むレコードをREGEXPで検索するクエリは、以下の通りです。

mysql> select *from DemoTable
    -> where Title REGEXP '^.*John.*$';

実行結果は次のようになります。

+----------------------------------+
| Title                            |
+----------------------------------+
| John is a good player            |
| No,John Doe is not a good player |
+----------------------------------+
2 rows in set (0.11 sec)

正規表現パターンの解説

このクエリで使用したパターン「^.*John.*$」の各要素の意味は以下の通りです。

  • ^ … 文字列の先頭を表します。
  • .* … 任意の文字が0回以上繰り返されることを表します。
  • John … 検索したい単語そのものです。
  • $ … 文字列の末尾を表します。

つまりこのパターンは「文字列のどこかにJohnという単語が含まれている」ことを意味します。そのため、文頭にある「John is a good player」と、カンマの後に続く「No,John Doe is not a good player」の両方がヒットし、3件中2件が抽出されました。

補足:単語境界を使ったより厳密な検索

単語の一部ではなく、独立した単語として完全に一致するものだけを抽出したい場合は、MySQLの正規表現で使える単語境界 [[:<:]][[:>:]] を活用するのも有効です。

mysql> select *from DemoTable
    -> where Title REGEXP '[[:<:]]John[[:>:]]';

このようにREGEXPを活用すれば、LIKE句では実現が難しい柔軟なパターンマッチング検索を、MySQLでも簡単に行うことができます。ログ解析やキーワード抽出など、さまざまな場面で役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで特定のカラム名を持つテーブルを検索する方法

    MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a

  2. MySQLで特定の日を加えてMM/YY形式をYYYY-MM-DDに変換する方法

    MM/YYをYYYY-MM-DDに変換するには? MySQLでは、STR_TO_DATE()関数を使うことで、MM/YYのような短い日付形式を完全な日付形式(YYYY-MM-DD)に変換できます。ポイントは、CONCAT()関数で欠けている「日」の値を文字列に連結してから変換することです。基本的な構文は以下のとおりです。 select str_to_date(concat(yourDateValue/, yourColumnName), %d/%m/%y) as anyAliasName from yourTableName; 使用しているフォーマット指定子の意味は次のとおりです。 %d …