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

MySQLのREGEXPでアルファベットを含むレコードのみを抽出する方法|数字のみのレコードを除外

MySQLのREGEXPで文字を含むレコードのみを表示する方法

MySQLでは、文字列と数値が混在するカラムから、アルファベットを含むレコードだけを抽出し、数字のみのレコードを除外したいケースがあります。このような場合には、REGEXP演算子を使用すると簡単に実現できます。

基本構文

REGEXPを使った基本的な構文は以下の通りです。

select yourColumnName from yourTableName where yourColumnName REGEXP '[a-zA-Z]';

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table demo41
-> (
-> name varchar(40)
-> );
Query OK, 0 rows affected (0.64 sec)

レコードの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。ここには「文字と数字が混在したデータ」「文字のみのデータ」「数字のみのデータ」など、さまざまなパターンを含めています。

mysql> insert into demo41 values('John Smith34');
Query OK, 1 row affected (0.13 sec)
mysql> insert into demo41 values('John Smith');
Query OK, 1 row affected (0.11 sec)
mysql> insert into demo41 values('9234John Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into demo41 values('john smith');
Query OK, 1 row affected (0.23 sec)
mysql> insert into demo41 values('98775');
Query OK, 1 row affected (0.15 sec)

テーブルの内容を確認

SELECT文でテーブル内の全レコードを表示してみます。

mysql> select *from demo41;

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

+----------------+
| name |
+----------------+
| John Smith34 |
| John Smith |
| 9234John Smith |
| john smith |
| 98775 |
+----------------+
5 rows in set (0.00 sec)

REGEXPを使った抽出クエリ

それでは、アルファベットを含むレコードのみを抽出するREGEXPクエリを実行します。

mysql> select name from demo41 where name REGEXP '[a-zA-Z]';

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

+----------------+
| name |
+----------------+
| John Smith34 |
| John Smith |
| 9234John Smith |
| john smith |
+----------------+
4 rows in set (0.00 sec)

結果の解説

正規表現パターン [a-zA-Z] は「a〜z および A〜Z のいずれか1文字を含む」という意味です。そのため、数字のみで構成された「98775」のようなレコードはマッチせず、結果から自動的に除外されます。

一方、「John Smith34」や「9234John Smith」のように数字が含まれていても、アルファベットが1文字でも含まれていればレコードとして表示されます。これにより、文字と数値が混在するデータの中から、文字を含むレコードだけを効率的に取り出すことができます。

なお、デフォルトの照合順序(utf8mb4_general_ci など)では大文字・小文字が区別されないため、[a-z] だけでも大文字にマッチしますが、意図を明確にするためにも [a-zA-Z] と指定しておくのが安全です。

  1. MySQLでIN句に指定した値のみを任意の順序で表示する方法

    MySQLでIN句に指定した値のみを任意の順序で表示する方法MySQLでは、IN()とORDER BY句、さらにFIELD()関数を組み合わせることで、IN句内に指定した値だけを、希望する独自の順序で表示できます。通常のORDER BYは昇順・降順のソートしかできませんが、FIELD()関数を使えば自由に並び順を定義できるのがポイントです。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1986(Number int);Query OK, 0 rows affected (0.00 sec)次に、INSERTコマ

  2. MySQLのREGEXPで特定の数値で始まる文字列+数値のレコードを取得する方法

    REGEXPを使った特定の数値で始まるレコードの取得方法MySQLでは、REGEXP演算子(正規表現)を使用することで、特定の数値で始まる文字列と数値が混在したレコードを簡単に抽出できます。基本的な構文は以下の通りです。Select yourColumnName1,yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue];サンプルテーブルの作成まずは動作確認のためのテーブルを作成しましょう。mysql> create table demo45 -&g