このクエリを使用して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文字と一致し、「%」を使用して任意の数の文字(ゼロ文字を含む)と一致できます。
(MySQLドキュメントのセクション .3.4.7。パターンマッチング から。)
like
のアンダースコアをリテラルとして使用する場合は、エスケープする必要があります。
select * from a where name like '%taz\_manual%.pdf%';
文字列を完全一致で一致させているときに、スペースとハイフンで同様の問題が発生しました。
SELECT id FROM location WHERE name = 'IND - HQ';
上記のクエリは、MySQLのレコードを返しませんでした。スペースとハイフンをエスケープし、次のように等号(=)と完全に一致する代わりにLIKE
を使用する必要がありました。
SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';