MySQLで特殊文字を含む文字列を検索する方法【REGEXP活用】
REGEXPを使った特殊文字の検索
文字列に特殊文字が含まれているかどうかを調べるには、MySQLのREGEXP(正規表現)演算子を使用します。基本的な構文は以下のとおりです。
select * from yourTableName
where yourColumnName REGEXP '[^a-zA-Z0-9]';
パターン [^a-zA-Z0-9] は「英数字以外の任意の1文字」に一致することを意味します。つまり、アンダースコア(_)やシャープ(#)、ドル記号($)などの特殊文字が含まれる行だけが抽出されます。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成しましょう。
mysql> create table specialCharactersDemo
-> (
-> StudentId varchar(100)
-> );
Query OK, 0 rows affected (0.58 sec)
レコードの挿入
続いて、INSERTコマンドでテーブルにレコードを追加します。特殊文字を含むデータと含まないデータを混ぜて登録しています。
mysql> insert into specialCharactersDemo values('STU_1234');
Query OK, 1 row affected (0.15 sec)
mysql> insert into specialCharactersDemo values('STU567');
Query OK, 1 row affected (0.14 sec)
mysql> insert into specialCharactersDemo values('STU#1234');
Query OK, 1 row affected (0.13 sec)
mysql> insert into specialCharactersDemo values('STU897$');
Query OK, 1 row affected (0.18 sec)
mysql> insert into specialCharactersDemo values('STU999');
Query OK, 1 row affected (0.43 sec)
mysql> insert into specialCharactersDemo values('STU1010');
Query OK, 1 row affected (0.14 sec)登録データの確認
SELECT文でテーブル内の全レコードを表示してみます。
mysql> select * from specialCharactersDemo;
実行結果は以下のとおりです。
+-----------+
| StudentId |
+-----------+
| STU_1234 |
| STU567 |
| STU#1234 |
| STU897$ |
| STU999 |
| STU1010 |
+-----------+
6 rows in set (0.00 sec)
特殊文字を含む行だけを抽出する
それでは、特殊文字を含む文字列を検索するクエリを実行してみましょう。
mysql> select * from specialCharactersDemo
-> where StudentId REGEXP '[^a-zA-Z0-9]';
実行結果:
+-----------+
| StudentId |
+-----------+
| STU_1234 |
| STU#1234 |
| STU897$ |
+-----------+
3 rows in set (0.02 sec)
ご覧のとおり、アンダースコア・シャープ・ドル記号といった特殊文字を含む3件のレコードのみが抽出されました。純粋な英数字だけで構成された「STU567」「STU999」「STU1010」は除外されています。
POSIX文字クラスを使った別の書き方
同じ結果は、POSIX文字クラスである [:alnum:] を使っても得られます。こちらの方が意図が伝わりやすく、可読性も高いのが特徴です。
mysql> select * from specialCharactersDemo
-> where StudentId REGEXP '[^[:alnum:]]';
実行結果:
+-----------+
| StudentId |
+-----------+
| STU_1234 |
| STU#1234 |
| STU897$ |
+-----------+
3 rows in set (0.05 sec)
[[:alnum:]] は「英数字(アルファベットと数字)」を表す文字クラスです。先頭の ^ で否定しているため、「英数字以外の文字を含む行」=特殊文字を含む行が検索されます。どちらの書き方でも結果は同じなので、チームのコーディング規約や好みに応じて使い分けるとよいでしょう。
-
Swiftで文字列に特殊文字が含まれているか判定する2つの方法
Swiftで文字列に特殊文字が含まれているかどうかを確認したい場合、if文やswitch文による条件分岐でも実現できますが、その場合は膨大な条件式を記述する必要があり、コーディングにも実行速度にも大きな負担となってしまいます。そこで本記事では、正規表現を使う方法と、Swift標準のCharacterSetを活用する方法の2通りを、具体的なコード例とともにわかりやすく解説します。 方法1:正規表現を使って判定する まずはString型のextensionを作成し、特殊文字の有無を判定するプロパティを追加しましょう。 extension String { var containsSpeci
-
MySQLで指定した文字数未満のレコードを抽出する方法
MySQLで文字数がX文字未満のレコードを取得するには?MySQLでは、CHAR_LENGTH()関数をWHERE句と組み合わせることで、指定した文字数より少ないレコードを簡単に抽出できます。CHAR_LENGTH()は文字列の「文字数」を返す関数で、マルチバイト文字(日本語など)も1文字として正しくカウントできるのが特徴です。実際の手順をサンプルを使って見ていきましょう。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> FullName varchar(50) -&g