web-dev-qa-db-fra.com

Champ SELECT MySQL contenant une sous-chaîne

L'utilisation de LIKE est très courante dans MySQL. Nous l'utilisons comme ceci: WHERE field LIKE '%substring%'. Où nous avons une sous-chaîne et le champ a une chaîne complète. Mais ce dont j'ai besoin, c'est quelque chose de contraire. J'ai des sous-chaînes dans le champ. Donc, je veux cette ligne qui contient une sous-chaîne de ma chaîne. Supposons que le tableau soit:

----+-------------------
 id | keyword
----+-------------------
  1 | admission
----+-------------------
  2 | head of the dept
----+-------------------

et j'ai une chaîne de l'utilisateur: Tell me about admission info. J'ai besoin d'une telle requête MySQL qui renvoie admission car il s'agit d'une sous-chaîne de chaîne utilisateur. Quelque chose comme:

SELECT keyword FROM table WHERE (keyword is a substring of 'Tell me about admission info')

merci d'avance.

15

Vous recherchez l'opérateur COMME

Correspondance de modèle à l'aide de la comparaison d'expressions régulières simples SQL. Renvoie 1 (TRUE) ou 0 (FALSE). Si expr ou pat est NULL, le résultat est NULL.

Quelque chose comme

SELECT  keyword 
FROM    table 
WHERE   ('Tell me about admission info' LIKE CONCAT('%', keyword, '%'))

SQL Fiddle DEMO

17
Adriaan Stander

Cela fonctionne très bien, en utilisant REGEXP:

SELECT  keyword 
FROM    table 
WHERE   'Tell me about admission info' REGEXP keyword;

Mais cela ne fonctionne que si keyword ne contient pas Expression régulière s'échappe ...

C'est à dire. Cela fonctionnera bien alors que keyword ne contient que des lettres, des chiffres, des espaces, etc.

2
F. Hauri

Essayez quelque chose comme ceci:

SELECT CASE WHEN 'Tell me about admission info' 
   LIKE CONCAT('%',`keyword`,'%')
   THEN `keyword` else null END as `keyword`

FROM    table1

WHERE CASE WHEN 'Tell me about admission info' 
  LIKE CONCAT('%',`keyword`,'%')
  THEN `keyword` else null END is not null;

SQL Fiddle ..

0
7alhashmi