2010-04-30 9 views
3

Je ne suis pas un expert SQL. J'essaie de résoudre avec élégance un problème de requête que d'autres ont dû avoir. Étonnamment, Google ne retourne rien qui aide. Fondamentalement, mon application a une boîte de "recherche". Ce champ de recherche permettra à un utilisateur de rechercher des clients dans le système. J'ai une table appelée "Client" dans ma base de données SQL Server 2008. Ce tableau est défini comme suit:SQL Server 2008 - Requête de recherche

client

  • UserName (nvarchar)

  • FirstName (nvarchar)

  • LastName (nvarchar)

Comme tu peux Imaginez, mes utilisateurs vont entrer des requêtes de différents cas et probablement mal orthographier les noms des clients régulièrement. Comment puis-je interroger ma table client et renvoyer les 25 résultats les plus proches de leur requête? Je n'ai aucune idée de comment faire ce classement et considérer les trois champs énumérés dans ma table.

Merci!

Répondre

4

Je suggère full-text search. La recherche en texte intégral fournira beaucoup d'options pour traiter certaines variantes de noms et peut classer la "proximité" des résultats en utilisant CONTAINSTABLE. Si vous trouvez que la recherche en texte intégral n'est pas suffisante, vous pouvez envisager un outil d'indexation tiers tel que Lucene.

0

La question de cas, vous pouvez résoudre facilement en réglant votre collation de table pour être insensible à la casse

La faute d'orthographe ne sais pas comment gérer, mais un coup d'oeil à la full text search capabilities of sql server ..

2

Vous pouvez essayer d'utiliser SOUNDEX ou DIFFERENCE comme alternative à la recherche en texte intégral.

SELECT TOP 25 UserName, FirstName, LastName 
FROM Customer 
WHERE DIFFERENCE(UserName, @SearchValue) > 2 
ORDER BY DIFFERENCE(UserName, @SearchValue), UserName 
Questions connexes