MySQLのLIKEクエリで「%」文字を含むレコードを検索する方法
MySQLのLIKE句において、「%」はワイルドカードとして機能するため、そのまま記述しても「%」という文字自体を検索することはできません。「%」を通常の文字(リテラル)として扱いたい場合は、バックスラッシュ(\)でエスケープする必要があります。この記事では、実際のサンプルを使って手順を解説します。
サンプルテーブルの作成
まず、テーブルを作成します。
mysql> create table DemoTable742 (Value varchar(100)); Query OK, 0 rows affected (2.91 sec)
次に、insertコマンドを使用してテーブルにレコードを挿入します。
mysql> insert into DemoTable742 values('632535MIT');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable742 values('US%UK');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable742 values('56%78');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable742 values('%_1234');
Query OK, 1 row affected (0.09 sec)selectステートメントで、テーブル内のすべてのレコードを確認してみましょう。
mysql> select *from DemoTable742;
実行結果は以下の通りです。
+-----------+ | Value | +-----------+ | 632535MIT | | US%UK | | 56%78 | | %_1234 | +-----------+ 4 rows in set (0.00 sec)
LIKEクエリで「%」を含むレコードを検索する
「%」文字を含むレコードをLIKEクエリで検索するには、以下のようにバックスラッシュでエスケープしたパターンを指定します。
mysql> select *from DemoTable742 where Value LIKE '%\%%';
実行結果は以下の通りです。
+--------+ | Value | +--------+ | US%UK | | 56%78 | | %_1234 | +--------+ 3 rows in set (0.00 sec)
出力を見ると、「%」を含む3件のレコード(US%UK、56%78、%_1234)だけが正しく抽出されていることがわかります。
ポイント解説
パターン '%\%%' の構成要素は以下の通りです。
- 先頭の
%:任意の文字列(ワイルドカード) \%:リテラルの「%」文字(エスケープ済み)- 末尾の
%:任意の文字列(ワイルドカード)
つまり「任意の文字列+%+任意の文字列」という意味になり、値の中間に「%」が含まれるレコードも漏れなく取得できます。同様に、アンダースコア(_)もワイルドカードとして扱われるため、これをリテラルとして検索したい場合には \_ のようにエスケープしてください。
-
MySQLのLIKE演算子とCONCAT関数を使って複数のカラムを横断して同じ値を検索する方法
MySQLでは、LIKE演算子とCONCAT()関数を組み合わせることで、複数のカラムを連結した文字列に対して部分一致検索を行うことができます。これにより、例えば「名前」と「科目」といった別々のフィールドにまたがる値を、1つの条件でまとめて検索できるようになります。ここでは、実際にテーブルを作成し、複数のカラムにわたる検索を行う手順を具体的なサンプルコードとともに解説します。サンプルテーブルの作成まず、学生名と科目を格納するテーブルを作成します。mysql> create table DemoTable-> (-> StudentName varchar(20),->
-
動的配列を活用したMySQLのLIKEクエリ実装方法を解説
動的配列に対するLIKEクエリの基本構文 MySQLでカンマ区切りの複数値(いわゆる動的な配列)が格納されたカラムに対してLIKEクエリを実行したい場合、LIKE句とワイルドカード「%」を組み合わせることで部分一致検索が可能です。基本となる構文は以下の通りです。 select *from yourTableName where yourColumnName2 like %yourValue% order by yourColumnName1 asc l