MySQLで正規表現(REGEXP)を使って英大小文字と数字を含む文字列を検索する方法
はじめに
MySQLで「a〜z」「A〜Z」「0〜9」のすべてを含む文字列を検索したい場合は、BINARY REGEXPとAND演算子を組み合わせることで実現できます。本記事では、実際のSQL実行例とともにその手順をわかりやすく解説します。
サンプルテーブルの作成
まず、検索対象となるテーブルを作成しましょう。
mysql> create table DemoTable738 (UserId varchar(100)); Query OK, 0 rows affected (0.81 sec)
レコードの挿入
続いて、INSERTコマンドを使ってテーブルにいくつかのレコードを追加します。
mysql> insert into DemoTable738 values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable738 values('sAm456');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable738 values('98Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable738 values('67david');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable738 values('69MIKE');
Query OK, 1 row affected (0.18 sec)登録データの確認
SELECT文を実行して、テーブル内の全レコードを表示してみましょう。
mysql> select *from DemoTable738;
実行すると、以下のような結果が得られます。
+---------+ | UserId | +---------+ | John | | sAm456 | | 98Carol | | 67david | | 69MIKE | +---------+ 5 rows in set (0.00 sec)
REGEXPを使った文字列検索クエリ
大文字・小文字・数字をすべて含む文字列を抽出するには、次のように各パターンに対してREGEXP BINARYを適用し、AND条件で連結します。
mysql> select *from DemoTable738 where UserId REGEXP BINARY '[A-Z]' and UserId REGEXP BINARY '[a-z]' and UserId REGEXP BINARY '[0-9]';
このクエリを実行すると、以下の出力が得られます。
+---------+ | UserId | +---------+ | sAm456 | | 98Carol | +---------+ 2 rows in set (0.03 sec)
クエリのポイント解説
ここで重要なのがBINARYキーワードです。通常のREGEXPは、カラムの照合順序(collation)によっては大文字と小文字を区別せずにマッチングを行うため、「[A-Z]」というパターンが小文字にも一致してしまうことがあります。BINARYを付けることでバイナリ比較となり、大文字・小文字を厳密に区別した正規表現マッチングが可能になります。
結果を見ると、「sAm456」と「98Carol」のように大文字・小文字・数字をすべて含むレコードのみが抽出されています。一方、「John」は数字を含まず、「67david」は大文字を、「69MIKE」は小文字を含まないため、それぞれ条件から除外されました。
補足:REGEXP_LIKEを使う方法(MySQL 8.0以降)
MySQL 8.0以降では、REGEXP_LIKE関数を使って同じ条件をより読みやすく記述することもできます。
SELECT * FROM DemoTable738 WHERE REGEXP_LIKE(UserId, '[A-Z]', 'c') AND REGEXP_LIKE(UserId, '[a-z]') AND REGEXP_LIKE(UserId, '[0-9]');
第3引数の 'c' は大文字小文字を区別するマッチングを明示的に指定するオプションです。環境に応じて使い分けるとよいでしょう。
-
【MySQL】カンマ区切りのリストから特定の文字列を検索するには?find_in_set()の使い方を解説
カンマ区切りのデータ検索には正規表現よりfind_in_set()が便利MySQLでカンマ区切りのリスト(CSV形式のカラム)から特定の値を検索したい場合、正規表現を使わなくても、find_in_set() 関数を使うことで簡単に実現できます。find_in_set()は、カンマ区切りの文字列リストの中に指定した値が含まれているかどうかを判定してくれる便利な関数です。基本構文select *from テーブル名 where find_in_set(検索したい値, カラム名);それでは、実際にサンプルテーブルを作成しながら動作を確認していきましょう。サンプルテーブルの作成まずは以下のコマンドでテ
-
MySQLデータベースの作成と使い方を徹底解説!初心者向け基本ステップ
MySQLデータベース操作の基本ステップMySQLのインストールが完了し、SQL文の入力方法を理解したら、いよいよデータベースへアクセスできるようになります。ここでは、データベース内のテーブルからデータを取得するまでの一連の手順を順番に見ていきましょう。サーバーへの接続データベースの作成テーブルの作成テーブルへのデータ投入テーブルからのデータ取得既存のデータベースを確認する新しいデータベースを作成する前に、まず環境にすでに存在するデータベースを把握しておくことが重要です。以下のクエリを実行することで、現在利用可能なデータベースの一覧を確認できます。クエリmysql> SHOW DATAB