1. ホーム
  2. mysql

[解決済み] なぜ"_"(アンダースコア)と"-"(ハイフン)は一致するのですか?

2022-09-27 21:26:33

質問

このクエリを使用してPDFマニュアルを検索する必要があります。

root@localhost:test> select * from a where name like '%taz_manual%.pdf%';
+--------------------+------------------+-------------+
| name               | description      |        size | 
+--------------------+------------------+-------------+
| taz-manual-1.1.pdf | Manual v1.0 TA-Z |    31351902 |
| taz-manual-0.2.pdf | Manual v1.0 T1-A |     3578278 |
| taz_manual-2.0.pdf | Manual v2.0 GA-X |   542578278 |
etc........
+--------------------+------------------+-------------+
132 row in set (0.00 sec)

と指定したのに、なぜかダッシュのついたものが表示されます。 taz_manual%.pdf ?

どのように解決するのですか?

なぜなら、アンダースコア _ はパーセントのようなワイルドカードであり % と同じで、1文字しか探さないことを除けば、ワイルドカードです。

<ブロッククオート

SQLパターンマッチでは、"_"で任意の1文字に、"%"で任意の文字数(0文字を含む)にマッチさせることができます。

(セクションより 3.3.4.7. パターンマッチング を参照してください)。

でアンダースコアを使用したい場合 like にあるアンダースコアをリテラルとして使いたい場合は、それをエスケープしなければなりません。

select * from a where name like '%taz\_manual%.pdf%';