2017-08-16 3 views
0

J'ai une table MySQL et j'ai besoin d'y récupérer des champs. J'ai besoin de la chaîne qui contient H_ et HP_ Séparément en utilisant deux requête différente.MySQL - La recherche de chaîne contient "_" avec LIKE

Mais le problème est que le trait de soulignement est dans le joker et je suis incapable de trouver le résultat correct.

Exemple de requête de HP_

SELECT nc.`logname`, nc.`client_id`, nc.`Customer_Name`, cb.`bwm_day_cir_upload`, cb.`bwm_day_cir_download` 
FROM `new_client` nc 
LEFT JOIN `client_bandwidth` cb ON cb.`client_id` = `nc`.`client_id` 
WHERE nc.`logname` LIKE '%HP_%' AND nc.`Active` = 'y' ORDER BY TRIM(UPPER(nc.`logname`)) 
+1

Échapez-vous '\ _'. – lad2025

+1

Et quand vous rencontrez des problèmes comme celui-ci, il est toujours utile de vérifier d'abord la documentation. [Documentation MySQL pour 'like'] (https://dev.mysql.com/doc/refman/5.7/fr/string-comparison-functions.html#operator_like): _" Pour tester les occurrences littérales d'un caractère générique, Si vous ne spécifiez pas le caractère 'ESCAPE'," \\ 'est supposé." _ –

+0

@MarkRotteveel, Merci pour la suggestion. –

Répondre

1

Comme vous l'avez dit est un caractère générique. Alors juste échapper avec '\_'

SELECT nc.`logname`, nc.`client_id`, nc.`Customer_Name`, cb.`bwm_day_cir_upload`, cb.`bwm_day_cir_download` 
FROM `new_client` nc 
LEFT JOIN `client_bandwidth` cb ON cb.`client_id` = `nc`.`client_id` 
WHERE nc.`logname` LIKE '%HP\_%' AND nc.`Active` = 'y' ORDER BY TRIM(UPPER(nc.`logname`)) 
1

Documentation à la rescousse! Avez-vous lu la page suivante: https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like

Voici un extrait:

Pour tester la présence littérale d'un caractère générique, faites précéder par le caractère d'échappement. Si vous ne spécifiez pas le caractère ESCAPE, \ est supposé.

  • \% correspond à un caractère%.

  • \_ correspond à un caractère _.

+0

Je ne l'ai pas vérifié d'ici mais le faire d'un autre endroit. Merci de partager. –