SQL Besoin d'une requête qui retourne chaque champ qui contient une lettre spécifiée
J'ai une table SQL avec 11000 mots clés en elle.
Je veux une requête qui peut trouver des champs qui contiennent un certian lettre.
Donc, si je comprend "a" et "b", la requête permet de sélectionner tous les champs qui contiennent la lettre "a" et la lettre "b" quelque part dans le champ.
Vous êtes à la recherche uniquement pour en minuscules ou en majuscules?
OriginalL'auteur Erik | 2009-10-16
Vous devez vous connecter pour publier un commentaire.
ps, Ce sera super lent. Vous souhaitez peut-être enquêter sur l'indexation du texte intégral des solutions.
Comme ce sera lent de toute façon, vous pourriez jeter dans un
lower(keyword)
si il n'est pas nécessaire de différencier les majuscules et minuscules.OriginalL'auteur Tom Ritter
essayer cette
et être préparé pour une analyse de table que cette fonctionnalité ne peut pas utiliser n'importe quel indices
OriginalL'auteur Charles Bretana
J'avais utilisez les caractères génériques de la recherche.
Il n'est pas regex, mais il fait un bon travail.
Vous pouvez aussi faire des variantes comme
<field> like 'sim[oa]ns'
-- qui va correspondre à simons, et simans...Depnding sur votre classement, vous peut ou peut ne pas inclure les données de cas,
like '%[aAbB]%'
Comme mentionné ailleurs être préparé pour une attente comme les indices sont hors de question, quand vous êtes en train de faire contient de la recherche.
Kris
OriginalL'auteur KSimons
Toutes les réponses données à l'aide de
LIKE
sont totalement valables, mais que chacun d'entre eux a noté la lenteur. Donc, si vous avez beaucoup de questions et pas trop de changements dans la liste de mots-clés, il est utile de construire une structure qui permet d'accélérer les requêtes.Voici quelques idées:
Si tout ce que vous cherchez est les lettres de a à z et vous ne vous souciez pas des majuscules/minuscules, vous pouvez ajouter des colonnes containsA .. containsZ et de pré-remplir les colonnes:
(et ainsi de suite pour toutes les colonnes).
L'indice, puis l'contient.. colonnes et votre requête serait
Cela peut être normalisée dans un "index de la table" iTable avec les colonnes
your_table_key
, lettre, l'indice de la lettre de la colonne et de votre requête devient quelque chose commeToutes ces opérations nécessitent certains de prétraitement (peut-être dans un déclencheur ou de faire), mais la question doit être beaucoup plus rapide.
OriginalL'auteur Thorsten
OriginalL'auteur longneck
et être prêt à attendre un certain temps...
Edit: notez que ce modèle à la recherche d'un "a", suivi par un 'b' (éventuellement avec d'autres "trucs" entre les deux) - en relisant ta question, qui peut ne pas être ce que tu voulais...
Oui, au départ, j'avais mal lu sa question en disant: "...et puis la lettre "b"," au lieu de "...et la lettre "b""
OriginalL'auteur Jerry Coffin
Je vais supposer que vous vouliez dire plus ou moins ce que vous avez dit, et vous souhaitez trouver des mots-clés dans votre table qui contient la lettre " a "et la lettre "b"." Certaines des solutions proposées ici ne donnent la réponse à une autre question.
Pour obtenir des mots-clés qui contiennent les deux les lettres " a " et " b " (par opposition à celles qui contiennent soit lettre), vous pouvez utiliser 'ab', comme dans la requête ci-dessous:
La table nommée "Nums26" doit contenir une colonne "i" (indexé pour l'efficacité) qui contient chacune des valeurs de 1 à 26 (ou plus si vous pouvez essayer de faire correspondre plus que des lettres). Voir ci-dessous. Les conseils donnés par d'autres en ce qui concerne les majuscules et les minuscules. Si votre classement est sensible à la casse, cependant, vous ne pouvez simplement spécifier "aAbB" ici comme le votre , parce que cela demande des mots-clés qui contiennent chacun des quatre personnages a, A, b et B. Vous pouvez utiliser des majuscules et match "AB", peut-être.
OriginalL'auteur Steve Kass
Vous pouvez utiliser un curseur et de la table temporaire approche de sorte que vous ne faites pas des full table scan à chaque fois. Ce que cela ferait de remplissage de la table temporaire avec l'ensemble de vos mots-clés, puis chaque chaîne dans le
@letters XML
, il serait de supprimer tous les enregistrements de la table temporaire. À la fin, vous n'avez enregistrements dans une table temporaire qui ont chacun de votre choix chaînes.OriginalL'auteur Greg Andora