我必须使用此查询查找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
时,为什么我会看到带破折号的那个?
答案 0 :(得分:229)
因为下划线_
是百分比%
的通配符,除了它只查找一个字符。
SQL模式匹配使您可以使用“_”匹配任何单个字符,使用“%”匹配任意数量的字符(包括零个字符)。
(来自MySQL文档中的3.3.4.7. Pattern Matching部分。)
如果你想在like
中使用下划线作为文字,你必须逃避它:
select * from a where name like '%taz\_manual%.pdf%';
答案 1 :(得分:2)
在匹配完全匹配的字符串时,我遇到了类似的空格和连字符问题:
SELECT id FROM location WHERE name = 'IND - HQ';
上述查询未返回MySQL中的任何记录。我不得不逃避空格和连字符并使用LIKE
而不是与equals(=)完全匹配,如下所示:
SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';