Méthode MySQL pour déterminer si un champ contient une chaîne
Méthode 1 : like
SELECT * FROM nom de la table WHERE nom du champ comme "% caractère %";
Méthode 2 : find_in_set()
Utiliser la chaîne mysql Fonction find_in_set ();
SELECT * FROM users WHERE find_in_set('字符', 字段名);
C'est bon, comment tu comprends ça ?
MySQL a de nombreuses fonctions de chaîne. La fonction find_in_set(str1,str2) renvoie l'index de position de str1 dans str2 qui doit être séparé par ",".
Remarque : Lorsque str2 est NO1 : "3,6,13,24,33,36", NO2 : "13,33,36,39", déterminez si le champ str2 dans les deux données contient ' 3', cette fonction peut parfaitement résoudre
mysql > SELECT find_in_set()('3','3,6,13,24,33,36') as test; -> 1 mysql > SELECT find_in_set()('3','13,33,36,39') as test; -> 0
Troisième méthode : localiser (caractère, nom du champ)
Utiliser localiser (caractère, nom du champ ), si elle est incluse, renvoie un nombre >0, sinon renvoie 0.
Son alias est la position dans
select * from 表名 where locate(字符,字段) select * from 表名 where position(字符 in 字段);
Exemple : Déterminez si l'URL dans la table du site contient 'http:/ /' sous-chaîne, si elle n'est pas incluse, elle sera épissée au début de la chaîne url
update site set url =concat('http://',url) where locate('http://',url)=0
Notez que le signe plus + ne peut pas être utilisé pour épisser des chaînes dans mysql, utilisez la fonction concat
Méthode 4 : INSTR (champ, caractères)
sélectionnez * dans le nom de la table où INSTR (champ, caractères)
De plus, l'auteur a vérifié le plan d'exécution du SQL ci-dessus ( (hors find_in_set), j'ai trouvé qu'ils sont tous :
On dit sur Internet qu'en utilisant Locate car la requête floue est rapide. Je ne sais pas comment la conclusion est arrivée. Cela peut être dû à la grande quantité de données.
(Tutoriel vidéo d'apprentissage gratuit recommandé : Tutoriel vidéo MySQL)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!