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

【MySQL】LIKE句で「a」が3つ以上含まれるレコードを抽出する方法

MySQLで「a」が3つ以上含まれるレコードを抽出する方法

MySQLで、ある文字列の中に特定の文字が複数回出現するレコードを検索したい場合は、LIKE句ワイルドカード「%」を組み合わせます。「%」は任意の0文字以上の文字列に一致するため、「a」が3つ以上含まれる文字列は「%a%a%a%」というパターンで表現できます。

基本構文

SELECT * FROM テーブル名 WHERE カラム名 LIKE '%a%a%a%';

サンプルテーブルの作成

それでは、実際に動作を確認していきましょう。まずは国名を格納するテーブルを作成します。

mysql> create table DemoTable1393
    -> (
    -> CountryName varchar(40)
    -> );
Query OK, 0 rows affected (0.71 sec)

テストデータの挿入

続いて、INSERT文でいくつかの国名を登録します。

mysql> insert into DemoTable1393 values('andorra');
Query OK, 1 row affected (0.50 sec)
mysql> insert into DemoTable1393 values('australia');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1393 values('argentina');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1393 values('austria');
Query OK, 1 row affected (0.26 sec)

登録済みデータの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1393;

実行結果は以下の通りです。

+-------------+
| CountryName |
+-------------+
| andorra     |
| australia   |
| argentina   |
| austria     |
+-------------+
4 rows in set (0.00 sec)

「a」が3つ以上含まれるレコードを検索するクエリ

以下のようにLIKE句で「%a%a%a%」を指定すると、CountryNameカラムに「a」が3回以上出現するレコードのみを取得できます。

mysql> select * from DemoTable1393 where CountryName like '%a%a%a%';

実行結果:

+-------------+
| CountryName |
+-------------+
| australia   |
+-------------+
1 row in set (0.00 sec)

結果の解説

4件のレコードのうち、条件に一致したのは「australia」だけでした。これは、それぞれの国名に含まれる「a」の数を数えてみるとよく分かります。

  • andorra:「a」が2個 → 不一致
  • australia:「a」が3個 → 一致
  • argentina:「a」が2個 → 不一致
  • austria:「a」が2個 → 不一致

補足:REGEXPを使った代替方法

より複雑な繰り返し条件を扱いたい場合は、REGEXP演算子を使用することもできます。例えば「REGEXP '(.*a){3}'」と記述すれば、同じく「a」が3つ以上含まれる文字列に一致させることが可能です。単純な文字の出現回数チェックであればLIKE句で十分ですが、正規表現を使うとより柔軟なパターンを表現できる点がメリットです。

  1. C#で正規表現を使ったパターンマッチングの基本と実装例

    正規表現(Regular Expression)とは、入力テキストに対して照合を行うためのパターンのことです。パターンは、1つ以上の文字リテラル、演算子、または構成要素から構成されます。C#では System.Text.RegularExpressions 名前空間の Regex クラスを利用することで、文字列の中から特定のパターンに一致する部分を簡単に抽出できます。ここでは、正規表現を使って「M」で始まる単語を抽出して表示する例を見ていきましょう。サンプルコードusing System; using System.Text.RegularExpressions; namespace Dem

  2. Rubyのパターンマッチング入門:case/in構文でコードを読みやすくする

    Rubyにおけるパターンマッチングについて、その仕組みとコードの可読性向上への活用方法を簡単に見ていきましょう。数年前の私のように、これを正規表現(Regex)のパターンマッチングと混同している方もいるかもしれません。「pattern matching」だけでGoogle検索すると、正規表現に近い定義の記事が上位に出てくることさえあります。正式には、パターンマッチングとは、あるデータ(文字列、トークンの列、タプルなど何でも)を別のデータと照合して検証するプロセスのことです。プログラミングにおいては、言語の能力に応じて、以下のようなことが可能になります。期待されるデータ型とのマッチング期待される