SQL SELECT OÙ le champ contient des mots
J'ai besoin d'un select qui permettrait le retour des résultats du type:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
Et j'ai besoin de tous les résultats, ce qui comprend les chaînes avec "mot2 terme3 mot1' ou 'mot1 terme3 mot2" ou toute autre combinaison des trois.
Tous les mots doivent être dans le résultat.
Vous devez vous connecter pour publier un commentaire.
Plutôt lent, mais la méthode de travail pour inclure tout de mots:
Si vous avez besoin d' tous mots à présent, utilisez ceci:
Si vous voulez quelque chose de plus rapide, vous avez besoin de regarder dans une recherche plein texte, et c'est très spécifique à chaque type de base de données.
word3 word2 word1
.'%word'
.' '+column1+' ' LIKE '%[^a-z]word[^a-z]%'
- lente, inefficace si ...Notez que si vous utilisez
LIKE
pour déterminer si une chaîne est une chaîne à une autre chaîne, vous devez vous échapper le modèle de caractères correspondants dans votre chaîne de recherche.Si votre dialecte SQL prend en charge
CHARINDEX
, il est beaucoup plus facile à utiliser à la place:Veuillez également garder à l'esprit que ce et de la méthode dans la accepté de répondre à couvrir seulement la sous-chaîne correspondant plutôt que le mot correspondant. Ainsi, par exemple, la chaîne
'word1word2word3'
serait encore match.InStr()
au lieuCHARINDEX
Fonction
Requête
Au lieu de
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
,ajouter Et entre ces mots comme:
pour plus de détails, voir ici
https://msdn.microsoft.com/en-us/library/ms187787.aspx
Mise à JOUR
Pour la sélection des phrases, l'utilisation des guillemets comme:
p.s. vous devez d'abord activer la Recherche Plein Texte sur la table avant d'utiliser contient un mot clé. pour plus de détails, Voir ici https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search
Changé
OR
àAND
basé sur modifier à la question.Si vous utilisez de Base de données Oracle alors vous pouvez atteindre cet objectif en utilisant contient requête. Contient des requêtes sur sont plus rapides que comme requête.
Si vous avez besoin de tous les mots
Si vous avez besoin des mots
Contient nécessité d'index de type CONTEXTE sur votre colonne.
Si vous voulez juste pour trouver une correspondance.
SQL Server :
Pour obtenir la correspondance exacte. Exemple
(';a;ab;ac;',';b;')
ne serez pas obtenir un match.essayez d'utiliser le "tesarus de recherche" dans l'index de texte intégral dans MS SQL Server. C'est beaucoup mieux que d'utiliser "%" dans la recherche, si vous avez des millions d'enregistrements. tesarus avoir une petite quantité de la consommation de mémoire que les autres.
essayez de rechercher cette fonction 🙂
meilleur moyen est de faire l'index de texte intégral sur une colonne dans le tableau
et l'utilisation contiennent au lieu de COMME
pourquoi ne pas utiliser "en" à la place?
L'un des moyens les plus faciles de réalisateur de ce qui est mentionné dans la question, en utilisant CONTIENT avec PRÈS de ou '~'. Par exemple, les requêtes suivantes nous donnerait toutes les colonnes qui comprennent notamment les mot1, mot2 et terme3.
En outre, CONTAINSTABLE retourne un classement pour chaque document en fonction de la proximité de "mot1", "mot2" et "terme3". Par exemple, si un document contient la phrase "Le mot1 est mot2 et terme3,", son classement est élevé parce que les conditions sont plus proches l'un de l'autre que dans d'autres documents.
Une autre chose que je voudrais ajouter, c'est que nous pouvons également utiliser proximity_term pour rechercher des colonnes où les mots sont à l'intérieur d'une certaine distance entre eux à l'intérieur de la colonne de la phrase.
Cela devrait idéalement être fait avec l'aide de sql server recherche plein texte si vous l'utilisez.
Toutefois, si vous ne pouvez pas obtenir que le travail sur votre DB pour une raison quelconque, c'est une interprétation intensive de la solution :-
Cela permet d'afficher tous les enregistrements où
column1
a une valeur partielle contientword
.ou