MySQLのLIKE演算子での曖昧検索時に、「_(アンダーバー/アンダースコア)」をエスケープする方法

MySQLのLIKE演算子での曖昧検索時に、「_(アンダーバー/アンダースコア)」をエスケープしたい場合「_(アンダーバー/アンダースコア)」の左にエスケープシーケンス「\」(「¥」の半角)を付与する。

「_(アンダーバー/アンダースコア)」をエスケープしない場合

mysql> select entry_basename from mt_entry where entry_basename like 'post_%' order by entry_id desc limit 10;
+-------------------------+
| entry_basename |
+-------------------------+
| post_1 |
| postgresql_92_psql_help |
| post_1017 |
| post_1016 |
| post_1015 |
| post_1014 |
| post_1013 |
| post_1012 |
| post_1011 |
| post_1010 |
+-------------------------+
10 rows in set (0.01 sec)

mysql> select entry_basename from mt_entry where entry_basename like 'post_' order by entry_id desc limit 10;
Empty set (0.00 sec)

mysql> select entry_basename from mt_entry where entry_basename like 'post__' order by entry_id desc limit 10;
+----------------+
| entry_basename |
+----------------+
| post_1 |
| post_4 |
| post_9 |
| post_8 |
| post_7 |
| post_6 |
| post_5 |
| post_3 |
| post_2 |
| post_1 |
+----------------+
10 rows in set (0.00 sec)

mysql> select entry_basename from mt_entry where entry_basename like 'post___' order by entry_id desc limit 10;
+----------------+
| entry_basename |
+----------------+
| post_86 |
| post_99 |
| post_98 |
| post_97 |
| post_96 |
| post_95 |
| post_94 |
| post_93 |
| post_92 |
| post_91 |
+----------------+
10 rows in set (0.00 sec)

※LIKE演算子での曖昧検索時には、_(アンダーバー/アンダースコア)は任意の文字列1つ分を表すので、単純に_(アンダーバー/アンダースコア)を検索文字列としたい場合には、文字列の左にエスケープシーケンス「\」(「¥」の半角)を付与する必要がある。

「_(アンダーバー/アンダースコア)」をエスケープした場合

mysql> select entry_basename from mt_entry where entry_basename like 'post\_%' order by entry_id desc limit 10;
+----------------+
| entry_basename |
+----------------+
| post_1 |
| post_1017 |
| post_1016 |
| post_1015 |
| post_1014 |
| post_1013 |
| post_1012 |
| post_1011 |
| post_1010 |
| post_1009 |
+----------------+
10 rows in set (0.00 sec)

前へ

LinuxコンソールでMySQLのバージョンを確認する方法

次へ

『All You Need Is Kill』の映画と漫画を観た感想