Maison  >  Article  >  base de données  >  Parlez du problème des champs de requête SQL inclus dans les instructions

Parlez du problème des champs de requête SQL inclus dans les instructions

巴扎黑
巴扎黑original
2017-08-11 15:08:221547parcourir

En parlant de requêtes floues SQL, la première chose qui vient à l'esprit devrait être le mot-clé like. Lorsque nous devons interroger des données contenant un champ spécifique, nous utilisons souvent la méthode de requête « %keyword% ». Pour des exemples de code spécifiques, veuillez vous référer à cet article

Avant-propos

Quand il s'agit de requêtes floues en SQL, la première chose qui vient à l'esprit l'esprit devrait être le mot-clé similaire.

Lorsque nous devons interroger des données contenant un champ spécifique, nous utilisons souvent la méthode de requête '%keyword%'. Par exemple :


SELECT ... FROM 表名 WHERE 字段名 LIKE '%关键字%'

Cela doit être considéré comme une méthode typique « contient XXX », mais que se passe-t-il si nous devons interroger des données dont les champs sont contenus dans des caractères spécifiques ? ?

Par exemple, j'ai une table de données de contact ConnectName, qui comporte un champ pour enregistrer les noms. Je veux obtenir les coordonnées de personnes nommées Xiaolan et Haiyuan. Dans des circonstances normales, la première chose à laquelle nous pouvons penser est :


SELECT * FROM ConnectName 
WHERE
  name = '小兰'
  OR name = '灰原'

Cette approche peut atteindre cet objectif. Si à ce moment-là, je veux soudainement vérifier une autre personne, comme "Conan", alors nous devons modifier la structure SQL et ajouter une phrase conditionnelle Where :


SELECT * FROM ConnectName 
WHERE
  name = '小兰'
  OR name = '灰原'
  OR name = '柯南'

Nous savons que la requête conditionnelle OR elle-même est inefficace et que l'instruction de changement structurel est un peu plus difficile à implémenter dans MyBatis (bien sûr, elle peut également être implémentée, il suffit de parcourir les champs insérés).

Est-ce que ça peut être plus simple ? Puis-je rassembler tous les mots-clés et n’utiliser qu’une seule condition Where pour y parvenir ?

CHARINDEX apparaît

À ce stade, nous pouvons utiliser le mot-clé CHARINDEX peut renvoyer un certain champ qui apparaît dans une chaîne de texte. La position est similaire à l'utilisation de l'indexOf de String Sans plus tarder, donnons une châtaigne :


CHARINDEX('李白','曹操很帅') =0

Dans la châtaigne ci-dessus, elle n'est pas incluse car Cao Cao. est très beau. Le mot-clé Li Bai, donc il est introuvable, et 0 est renvoyé l'index des caractères, donc 1.

est renvoyé. Après avoir compris comment l'utiliser, nous pouvons utiliser le mot-clé CHARINDEX pour optimiser. notre instruction SQL :

CHARINDEX('李白','李白很帅') =1

Si le nom correspondant au champ nom apparaît dans 'Conan Xiaolan Haibara', alors la fonction CHARINDEX retournera supérieur à 1, et nous pouvons obtenir les données que nous voulons (les trois peuvent également jouer ensemble) ^-^)

L'implémentation mybatis correspondante est également relativement simple

SELECT * FROM ConnectName 
WHERE
  CHARINDEX(name ,'小兰灰原柯南')>0

Si nous voulons ajouter une nouvelle personne plus tard, comme Mouri Kogoro, il vous suffit d'ajouter 'Xiaolan Haibara Conan Mouri Kogoro' aux paramètres entrants.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn