web-dev-qa-db-fra.com

Correspondance de chaîne de requête MySQL SELECT

Normalement, lorsqu’on interroge une base de données avec SELECT, il est courant que l’on souhaite rechercher les enregistrements correspondant à une chaîne de recherche donnée.

Par exemple:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';

Cette requête devrait me donner tous les enregistrements où "Bob Smith" apparaît n'importe où dans le champ du nom.

Ce que j'aimerais faire, c'est l'inverse.

Au lieu de rechercher tous les enregistrements contenant «Bob Smith» dans le champ de nom, je souhaite rechercher tous les enregistrements dont le champ de nom se trouve dans «Robert Bob Smith III, PhD.», Un argument de chaîne de la requête.

23
JR Lawhorne

Il suffit de tourner le LIKE autour

SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%',name,'%')
35
The Scrum Meister

Vous pouvez utiliser des expressions régulières comme ceci:

SELECT * FROM pet WHERE name REGEXP 'Bob|Smith'; 
9
uncaught_exceptions

Vous pouvez aussi utiliser 

SELECT * FROM customers WHERE name LIKE "%Bob Smith%";

remarquez les doubles citations

1
Kushal Raj Gupta

Dans la requête ci-dessus, si nous recherchons un caractère spécial, par exemple: '__' ou '()' pour récupérer toutes les données, 

SQL> sélectionnez * à partir de test_brck où NVL (UPPER (nom_véhicule), 1) LIKE nvl (UPPER ('%' || & v_name || '%'), NVL (UPPER (nom_vol,));

Entrez la valeur pour v_name: '_'

ancien 2: où NVL (UPPER (v_name), 1) LIKE nvl (UPPER ('%' || & v_name || '%'), NVL (UPPER (v_name), 1))

new 2: où NVL (UPPER (v_name), 1) LIKE nvl (UPPER ('%' || '_' || '%'), NVL (UPPER (v_name), 1))

V_NAME

Ramu (est allé gbl)

Ramj

Ramu_Karan (allé blr)

Sidd_Karan

ABC% ^

xy123

abc

7 lignes sélectionnées. 

sortie:

Ramu_Karan (allé blr)

Sidd_Karan

0
Rakesh