MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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だけで柔軟に文字列のパターン検証を行えます。氏名フィールドのデータ品質チェックなど、実務でも役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで列の値から末尾の2文字を削除するクエリの書き方

    MySQLではLEFT()関数を使うことで、文字列の先頭から指定した文字数だけを取り出すことができます。この関数とLENGTH()関数を組み合わせれば、テーブル内のすべての列の値から末尾の2文字を簡単に削除できます。 まずは、動作を確認するためのサンプルテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Name varchar(10) -> ); Query OK, 0 rows affected (0.71 sec) 次に、INSERT文を使ってレコードを挿入します。 mysql> i

  2. MySQLで文字列の先頭15文字だけを表示するクエリの書き方

    MySQLで文字列の先頭(左側)から指定した文字数だけを取り出すには、LEFT()関数を使用します。第1引数に対象の文字列、第2引数に取得したい文字数を指定するだけで、手軽に部分文字列を抽出できます。 この記事では、テーブルに登録されたタイトルの先頭15文字だけを表示する方法を、実際のSQLと実行結果付きで順を追って解説します。 1. サンプルテーブルを作成する まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable     -> (    &nbs