Почему "_" (подчеркивание) соответствует "-" (дефис)?
Мне нужно искать руководство по PDF, используя этот запрос:
[email protected]: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 позволяет использовать "_" для соответствия любому одиночному символу и "%" для соответствия произвольному количеству символов (включая нулевые символы).
(Из раздела 3.3.4.7 Соответствие шаблонов в документации по MySQL.)
Если вы хотите использовать символ подчеркивания в like
как литерал, вам нужно его избежать:
select * from a where name like '%taz\_manual%.pdf%';
Ответ 2
У меня была аналогичная проблема с пространством и дефисами при совпадении строк с точным соответствием:
SELECT id FROM location WHERE name = 'IND - HQ';
Вышеуказанный запрос не возвратил никаких записей в MySQL. Мне пришлось избегать пробелов и дефисов и использовать LIKE
вместо точного совпадения с equals (=) следующим образом:
SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';