8
votes

Question SQL Wildcard

Désolé je suis nouveau à travailler avec des bases de données - j'essaie d'effectuer une requête Cela obtiendra tous les caractères similaires à une chaîne de SQL.

Par exemple,

Si je cherche tous les utilisateurs qui commencent par une certaine chaîne, quelque chose comme S * ou SM * qui retournerait "Smith, smelly, sourires, etc ..."

Suis-je sur la bonne voie avec cela?

Toute aide serait appréciée et merci d'avance!


1 commentaires

Notez que différentes versions de SQL vous donnent des choix différents; mais ils supportent tous % .


6 Réponses :


7
votes

Le comme opérateur est ce que vous recherchez Pour, donc pour votre exemple, vous auriez besoin de quelque chose comme: xxx

le caractère % est la carte sauvage dans SQL.


1 commentaires

C'est ce que je cherchais à la recherche - comme j'avais vraiment besoin de quelque chose pour trouver des noms et d'autres champs qui "ont commencé avec" une chaîne spécifique. Désolé pour mon pauvre libellé.



4
votes

Pour obtenir tous les utilisateurs un nom de Smith

SELECT * 
  FROM [Users]
 WHERE LastName LIKE 'Smith%'


0 commentaires

0
votes

Votre question n'est pas entièrement claire.

Si vous voulez tous les utilisateurs avec le nom de famille Smith, une recherche régulière fonctionnera: xxx

si vous voulez tout Les utilisateurs commençant par 'S' et se terminent par "TH", vous pouvez utiliser comme et une carte générique: xxx

(notez la norme SQL de nombreux caractères génériques de '%' plutôt que '*').

Si vous voulez vraiment une correspondance "sonne comme", de nombreuses bases de données prennent en charge une ou plusieurs recherches d'algorithme Soundex. Vérifiez la documentation pour votre produit spécifique (que vous ne mentionnez pas dans la question).


0 commentaires

1
votes

Vous pouvez également aimer les résultats de Soundex code>, en fonction de votre préférence pour le nom de famille Similarité.

select * 
from [users]
where soundex('lastname') = soundex( 'Smith' )
or upper(lastname) like 'SM%'


1 commentaires

Sauf que Soundex n'est pas très bon (par exemple, quelque chose comme un taux de 60% de faux taux positif a été observé). Il a été conçu pour assortir des noms de langue anglaise, pas des mots arbitraires. Il tombe sur son visage donné du texte arbitraire (ou du texte en dehors des 26 lettres de base de l'alphabet). Voici le brevet original de 1917. Google.com/patents/about?id=ebdgaaaaebaj&dq = 1,261,167



4
votes

standard (ANSI) SQL dispose de deux caractères génériques à utiliser avec le mot-clé similaire:

  • _ fort> (soussecore). Correspond à une seule occurrence de tout caractère unique. LI>
  • % strong> (signe pour cent). Correspond à zéro ou à plus d'occurrences de tout caractère unique. LI> ul>

    De plus, SQL Server étend la correspondance générique similaire à inclure la spécification de jeu de caractères, plutôt qu'un spécificateur de jeu de caractères d'expression régulier normal: P>

    • [caractère-set] strong> correspond à un seul caractère à partir de l'ensemble spécifié li>
    • [^ Set] strong> correspond à un seul caractère non dans l'ensemble spécifié. LI> ul>

      Les jeux de caractères peuvent être spécifiés de manière normale comme une plage aussi: p>

      • [0-9] correspond à n'importe quel chiffre décimal. LI>
      • [A-Z] correspond à une lettre majuscule li>
      • [^ A-Z0-9-] correspond à n'importe quel caractère qui n'est pas une lettre, un chiffre ou un trait d'union. Li> ul>

        La sémantique de la correspondance de la lettre de la lettre, une personne à charge de la séquence de collation utilisée. Il peut ne pas être sensible à la casse. P>

        En outre, pour correspondre à un support carré gauche littéral ('[]'), vous DOIT FORT> Utilisez le spécificateur de la plage de caractères. Vous n'obtiendrez pas une erreur de syntaxe, mais vous n'obtiendrez pas une correspondance, non plus. P>

        where 'abc[x' like 'abc[x'
        


0 commentaires

9
votes

SQL ne peut pas faire cela ... placer le symbole pourcentage au milieu.

 SELECT * FROM users WHERE last_name LIKE 'S%' and last_name LIKE '%th' 


0 commentaires