MySQLクエリで特定の行に2つの単語のみが含まれているか確認する方法
REGEXPを使って2単語のみの行を判定する
カラムの値が「スペースで区切られた2つの単語」で構成されているかどうかを確認したい場合、MySQLの正規表現(REGEXP)を使うと簡単に実現できます。基本の構文は以下の通りです。
SELECT * FROM テーブル名 WHERE カラム名 REGEXP '^[^ ]+[ ]+[^ ]+$';
この正規表現は「スペース以外の文字が1文字以上続く → スペース → 再びスペース以外の文字が1文字以上続き、そこで終わる」というパターンに一致します。つまり、単語がスペース1つで区切られてちょうど2つある行だけを抽出できます。
それでは、実際にサンプルテーブルを作成して動作を確認してみましょう。
1. サンプルテーブルを作成する
mysql> CREATE TABLE DemoTable1412
-> (
-> Name VARCHAR(40)
-> );
Query OK, 0 rows affected (0.52 sec)
2. テストデータを挿入する
INSERT文を使って、3件のレコードを登録します。意図的に「2単語」「3単語」のデータを混ぜておきます。
mysql> INSERT INTO DemoTable1412 VALUES('John Adam Carol');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable1412 VALUES('Mike Sam');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable1412 VALUES('Chris James Robert');
Query OK, 1 row affected (0.15 sec)3. 登録されたデータを確認する
mysql> SELECT * FROM DemoTable1412;
このSELECT文を実行すると、以下のような結果が表示されます。
+--------------------+
| Name |
+--------------------+
| John Adam Carol |
| Mike Sam |
| Chris James Robert |
+--------------------+
3 rows in set (0.00 sec)
4. 2単語のみの行を抽出するクエリを実行する
ここで本題のクエリです。REGEXPを使って、名前がスペースで区切られた2つの単語で構成されている行だけを取り出します。
mysql> SELECT * FROM DemoTable1412 WHERE Name REGEXP '^[^ ]+[ ]+[^ ]+$';
5. 実行結果
クエリを実行すると、次の出力が得られます。
+----------+
| Name |
+----------+
| Mike Sam |
+----------+
1 row in set (0.00 sec)
正規表現パターンの解説
- ^:文字列の先頭を表します。
- [^ ]+:スペース以外の文字が1回以上繰り返される(=1つ目の単語)ことを意味します。
- [ ]+:スペースが1回以上連続すること(=単語間の区切り)を表します。
- [^ ]+$:再びスペース以外の文字が続き、文字列の末尾で終わる(=2つ目の単語)ことを意味します。
このため、「John Adam Carol」や「Chris James Robert」のように単語が3つ以上ある行はマッチせず、「Mike Sam」のようなちょうど2単語の行だけが結果として返されます。
補足:複数のスペースにも対応させたい場合
上記のパターンでは「[ ]+」としているため、単語間に複数のスペースがあってもマッチします。ただし、先頭や末尾に余分なスペースがあるデータには一致しない点に注意してください。必要に応じてTRIM関数と組み合わせることで、より堅牢なチェックが可能になります。
SELECT * FROM DemoTable1412 WHERE TRIM(Name) REGEXP '^[^ ]+[ ]+[^ ]+$';
このように、MySQLのREGEXP演算子を活用すれば、SQLだけで柔軟に文字列のパターン検証を行えます。氏名フィールドのデータ品質チェックなど、実務でも役立つテクニックなので、ぜひ覚えておきましょう。
-
MySQLで列の値から末尾の2文字を削除するクエリの書き方
MySQLではLEFT()関数を使うことで、文字列の先頭から指定した文字数だけを取り出すことができます。この関数とLENGTH()関数を組み合わせれば、テーブル内のすべての列の値から末尾の2文字を簡単に削除できます。 まずは、動作を確認するためのサンプルテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Name varchar(10) -> ); Query OK, 0 rows affected (0.71 sec) 次に、INSERT文を使ってレコードを挿入します。 mysql> i
-
MySQLで文字列の先頭15文字だけを表示するクエリの書き方
MySQLで文字列の先頭(左側)から指定した文字数だけを取り出すには、LEFT()関数を使用します。第1引数に対象の文字列、第2引数に取得したい文字数を指定するだけで、手軽に部分文字列を抽出できます。 この記事では、テーブルに登録されたタイトルの先頭15文字だけを表示する方法を、実際のSQLと実行結果付きで順を追って解説します。 1. サンプルテーブルを作成する まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable -> ( &nbs