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

MySQLで文字列に含まれるアンダースコア(_)を検索・一致させる方法

MySQLでアンダースコアを一致させるには?

MySQLのLIKE句では、アンダースコア「_」は任意の1文字を表すワイルドカードとして扱われます。そのため、文字列の中に実際に含まれるアンダースコアを検索したい場合は、バックスラッシュ(\)でエスケープする必要があります。

以下が基本的な構文です。

select * from yourTableName where yourColumnName LIKE '%\_%';

サンプルテーブルの作成

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

mysql> create table DemoTable
(
    ClientId varchar(200)
);
Query OK, 0 rows affected (0.79 sec)

テストデータの挿入

insertコマンドを使って、いくつかのレコードを挿入します。アンダースコアを含むデータと含まないデータを混ぜて登録しています。

mysql> insert into DemoTable values('CLI_101');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('CLI1110');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('_CLI102');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('CLI103_');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('CLI1111');
Query OK, 1 row affected (0.16 sec)

登録済みレコードの確認

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

mysql> select * from DemoTable;

実行結果は次の通りです。

+----------+
| ClientId |
+----------+
| CLI_101  |
| CLI1110  |
| _CLI102  |
| CLI103_  |
| CLI1111  |
+----------+
5 rows in set (0.00 sec)

LIKE句でアンダースコアを一致させる

LIKE句を使用して、アンダースコアを含む文字列だけを抽出するクエリがこちらです。ポイントは「\_」のようにエスケープしている点です。

mysql> select * from DemoTable where ClientId LIKE '%\_%';

実行すると、アンダースコアを含む文字列のみが出力されます。

+----------+
| ClientId |
+----------+
| CLI_101  |
| _CLI102  |
| CLI103_  |
+----------+
3 rows in set (0.00 sec)

REGEXPを使った代替方法

正規表現によるREGEXP演算子を使えば、エスケープせずに同じ結果を得ることもできます。REGEXPでは「_」が単なるリテラル文字として扱われるためです。

mysql> select * from DemoTable where ClientId REGEXP '_';

実行結果は先ほどと同様になります。

+----------+
| ClientId |
+----------+
| CLI_101  |
| _CLI102  |
| CLI103_  |
+----------+
3 rows in set (0.00 sec)

まとめ

MySQLでアンダースコアそのものを検索する場合は、LIKE句で「%\_%」のようにバックスラッシュでエスケープするか、REGEXP演算子を利用します。用途や可読性に応じて使い分けるとよいでしょう。

  1. MySQLで文字列から日付を抽出する方法|SUBSTRING_INDEX関数の実践的な使い方

    MySQLで文字列から日付を抽出するには?MySQLで文字列の中から日付部分だけを取り出したい場合、SUBSTRING_INDEX() 関数を使うのが便利です。この関数は、指定した区切り文字を基準に文字列を分割し、必要な部分を取得できます。ここでは、実際にテーブルを作成し、文章の中に含まれる日付(例:12/31/2018)を抽出する手順を解説します。1. サンプルテーブルを作成するまず、文字列を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> Title text -> );Query OK

  2. MySQL正規表現の使い方:文字列内に含まれる数字をマッチさせる方法

    MySQLのREGEXPで文字列内の数字を検索する方法 MySQLでは、REGEXP演算子を使うことで、文字列の中に数字が含まれているレコードを簡単に抽出できます。文字列内の数字(0〜9)にマッチさせたい場合は、以下のような構文を使用します。 SELECT * FROM テーブル名 WHERE カラム名 REGEXP [0-9]; なお、正規表現では [0-9] の代わりに \\d を使うこともできますが、MySQLのREGEXPでは文字クラス [0-9] を指定するのが最も確実で一般的な方法です。 サンプルテーブルの作成 実際に動作を確認するために、まずテーブルを作成しましょう。 mysq