Dlaczego ""(podkreślenie) pasuje do " - " (myślnik)?

Muszę poszukać instrukcji PDF używając tego zapytania:

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)

Dlaczego widzę tę z myślnikami, kiedy podaję nazwę taz_manual%.pdf?

Author: Ben, 2011-11-23

2 answers

Ponieważ podkreślenie _ jest znakiem wieloznacznym, takim jak procent %, z tym, że szuka tylko jednego znaku.

SQL pattern matching umożliwia użycie"_", aby dopasować dowolny pojedynczy znak i"%", aby dopasować dowolną liczbę znaków (w tym zero znaków).

(z sekcji 3.3.4.7. Pattern Matching w dokumentacji MySQL.)

Jeśli chcesz użyć podkreślenia w like jako dosłownego, musisz od niego uciec:

select * from a where name like '%taz\_manual%.pdf%';
 208
Author: Book Of Zeus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 02:35:24

Miałem podobny problem ze spacją i myślnikami podczas dopasowywania łańcuchów z dokładnym dopasowaniem:

SELECT id FROM location WHERE name = 'IND - HQ';

Powyższe zapytanie nie zwróciło żadnych rekordów w MySQL. Musiałem uciec od spacji i myślników i użyć LIKE zamiast dokładnego dopasowania z równymi ( = ) w następujący sposób:

SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';
 2
Author: NBhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 20:47:31