MySQLの正規表現(REGEXP BINARY)を使って大文字を検索する方法
MySQLでカラム内に含まれる大文字を検索したい場合は、REGEXP BINARYを使用すると簡単に実現できます。通常、MySQLの照合順序( collation )は大文字と小文字を区別しないため、単純なREGEXPでは「JOHN」と「john」が同じように扱われてしまいます。そこでBINARYキーワードを組み合わせることで、大文字・小文字を厳密に区別した正規表現検索が可能になります。
基本的な構文は以下の通りです。
SELECT * FROM テーブル名 WHERE カラム名 REGEXP BINARY '[A-Z]{2}';このクエリは、「2文字以上の連続する大文字」を含むレコードを抽出します。それでは、実際にサンプルテーブルを作成して動作を確認してみましょう。
1. サンプルテーブルを作成する
まず、学生の名前を格納するテーブルを作成します。
mysql> CREATE TABLE FindCapitalLettrsDemo
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentFirstName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)
2. テーブルにレコードを挿入する
次に、INSERTコマンドを使っていくつかのレコードを登録します。大文字のみ、先頭だけ大文字、すべて小文字など、パターンの異なる名前を意図的に混ぜています。
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('JOHN');
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('bob');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('carol');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('John');
Query OK, 1 row affected (0.14 sec)3. 登録されたレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM FindCapitalLettrsDemo;
実行結果は以下の通りです。
+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1 | JOHN |
| 2 | Carol |
| 3 | bob |
| 4 | carol |
| 5 | John |
+-----------+------------------+
5 rows in set (0.00 sec)
4. 正規表現で大文字を含むレコードを検索する
それでは、REGEXP BINARYを使って大文字が連続しているレコードを抽出してみます。
mysql> SELECT * FROM FindCapitalLettrsDemo
-> WHERE StudentFirstName REGEXP BINARY '[A-Z]{2}';
実行結果は以下の通りです。
+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1 | JOHN |
+-----------+------------------+
1 row in set (0.14 sec)
結果のポイント
「JOHN」のように2文字以上の大文字が連続して含まれるレコードのみが抽出されました。「Carol」や「John」のような先頭文字だけが大文字のデータは、パターン「[A-Z]{2}」に一致しないため除外されます。
なお、「{2}」の部分を変更すれば条件を調整できます。たとえば「[A-Z]{1}」にすれば1文字でも大文字を含むレコード(「Carol」「John」など)も取得でき、「[A-Z]{3}」にすれば3文字以上の連続する大文字を持つレコードだけを絞り込むことができます。
このように、REGEXP BINARYを活用すれば、MySQLでも大文字・小文字を厳密に区別した柔軟な文字列検索が可能になります。データの品質チェックや入力値のバリデーションなどにもぜひ活用してください。
-
MySQLで特定のカラム名を持つテーブルを検索する方法
MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a
-
JDBCでMySQLのバックスラッシュをエスケープするには?PreparedStatementの使い方を解説
PreparedStatementでバックスラッシュを安全にエスケープするMySQLにデータを挿入する際、バックスラッシュ(\)などの特殊文字を安全に扱うには、PreparedStatementを使用するのが最も確実な方法です。PreparedStatementはパラメータを自動的にエスケープしてくれるため、手動で「\\」のように置き換える必要がなく、SQLインジェクション対策としても有効です。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1904 ( ClientId int, ClientName var