110 votes

Pourquoi "_" (trait de soulignement) correspond à "-" (trait d'union)?

Je dois rechercher un manuel PDF en utilisant cette requête:

 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)
 

Pourquoi est-ce que je vois celui avec des tirets quand je spécifie le nom à taz_manual%.pdf ?

231voto

Book Of Zeus Points 38130

Parce que le trait de soulignement (_) est un joker comme l' % (pour cent) sauf qu'il ne regarde pour un caractère.

SQL correspondant à un modèle vous permet d'utiliser des "_" pour remplacer tout caractère et "%" pour correspondre à un nombre arbitraire de caractères (y compris les caractères nul).

(Tiré de l'article 3.3.4.7. Le Pattern Matching dans la documentation de MySQL.)

Si vous souhaitez utiliser le trait de soulignement en like comme un littéral, vous devez vous échapper:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X