2011-11-23 32 views
90

tengo que buscar un manual en formato PDF usando esta consulta:¿Por qué "_" (guión bajo) coincide con "-" (guión)?

[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) 

¿Por qué aparece el uno con guiones para especificar el nombre de ser taz_manual%.pdf?

Respuesta

187

Porque el guión bajo _ es un comodín como el porcentaje %, excepto que solo busca un carácter.

La coincidencia de patrones SQL le permite usar "_" para unir cualquier carácter y "%" para coincidir con un número arbitrario de caracteres (incluidos cero caracteres).

(. Desde la sección 3.3.4.7. Pattern Matching en la documentación de MySQL)

Si desea utilizar el subrayado en like como un literal, usted tiene que escapar de ella:

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

gracias por la información (y el enlace) yo sólo pensaba que el% era un comodín. –

+2

de nada –

+22

¿CÓMO NUNCA HE CONOCIDO ESTO? – SublymeRick

1

que tenían un parecido problema con el espacio y guiones, mientras que las cadenas coincidentes con coincidencia exacta:

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

Lo anterior q uery no devolvió ningún registro en MySQL. Tenía que escapar de los espacios y guiones y utilizar LIKE en lugar de coincidencia exacta con igual (=) de la siguiente manera:

SELECT id FROM location WHERE name LIKE 'IND_\-_HQ'; 
+0

¿Estás seguro de que esto está relacionado? Tal vez no había una fila de ubicación con este nombre exacto ... ??? –

+0

sí, hubo filas con location = 'IND - HQ' y lo anterior solucionó el problema que enfrentó – NBhat

+0

¿Y lo sabe porque le ha preguntado a la persona que tuvo esta pregunta cinco años antes de haber publicado su respuesta? –

Cuestiones relacionadas