MySQLでカラム内の値を検索するには?REGEXP_INSTR関数の使い方
MySQLでカラム内の値を検索する方法
MySQLでは、REGEXP_INSTR()関数を使うことで、指定したカラムに特定の文字列が含まれているかどうかを正規表現ベースで判定できます。マッチした場合は「1」、マッチしなかった場合は「0」を返すため、WHERE句と組み合わせることで柔軟な部分一致検索が可能になります。
基本構文
構文は以下の通りです。
select *from yourTableName where REGEXP_INSTR(yourColumnName,yourSearchValue);
サンプルテーブルの作成
上記の構文を理解するために、まずテーブルを作成しましょう。
mysql> create table demo64
-> (
-> id int not null auto_increment primary key,
-> name varchar(40)
-> );
Query OK, 0 rows affected (3.06 sec)
レコードの挿入
insertコマンドを使用して、テーブルにいくつかのレコードを挿入します。
mysql> insert into demo64(name) values('John Smith');
Query OK, 1 row affected (0.21 sec)
mysql> insert into demo64(name) values('John Doe');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo64(name) values('Chris Brown');
Query OK, 1 row affected (0.08 sec)
mysql> insert into demo64(name) values('David Miller');
Query OK, 1 row affected (0.20 sec)
mysql> insert into demo64(name) values('Carol Taylor');
Query OK, 1 row affected (0.10 sec)レコードの表示
selectステートメントを使って、テーブルのレコードを表示します。
mysql> select *from demo64;
以下のような出力が得られます。
+----+--------------+
| id | name |
+----+--------------+
| 1 | John Smith |
| 2 | John Doe |
| 3 | Chris Brown |
| 4 | David Miller |
| 5 | Carol Taylor |
+----+--------------+
5 rows in set (0.00 sec)
REGEXP_INSTR()を使った検索クエリ
カラム内の値を検索するクエリは以下の通りです。
mysql> select *from demo64 where REGEXP_INSTR(name,'John');
実行すると、次のような出力が得られます。
+----+------------+
| id | name |
+----+------------+
| 1 | John Smith |
| 2 | John Doe |
+----+------------+
2 rows in set (0.00 sec)
この結果から、「John」という文字列を含む2件のレコードだけが抽出されていることがわかります。なお、REGEXP_INSTR()関数はMySQL 8.0以降で利用可能です。それ以前のバージョンをお使いの場合は、LIKE句やREGEXP演算子を代わりに使用してください。
-
MySQLストアドプロシージャ内で現在のデータベース名を取得する方法
MySQLで現在接続しているデータベース名を取得したい場合は、DATABASE() 関数を使用します。まず、基本的な構文を見てみましょう。基本構文select database();この関数は、現在選択されているデータベースの名前を文字列として返します。データベースが選択されていない場合は NULL を返します。ストアドプロシージャへの実装次に、上記の構文を実際にストアドプロシージャの中に組み込んでみましょう。以下の手順で作成できます。mysql> delimiter // mysql> create procedure get_procedure_database_name()
-
MySQLでテーブルに存在しない値だけを抽出する方法(UNION ALLとNOT EXISTSの活用)
MySQLでテーブルに存在しない値を照会するには? MySQLで「テーブルにまだ登録されていない値だけ」を取得したい場合、UNION ALLとWHERE NOT EXISTSを組み合わせるのが有効です。サブクエリで候補となる値をUNION ALLで列挙し、NOT EXISTSによって既にテーブル内に存在する値を除外することで、存在しない値のみを抽出できます。 ここでは、実際の手順をサンプルコードとともに解説します。 1. サンプルテーブルを作成する まず、自動採番(AUTO_INCREMENT)のカラムを持つテーブルを作成します。 mysql> create table DemoTab