SQL Server – search de correspondances dans les noms

J'utilise SQL Server 2005, j'ai des noms entrant dans un système et je veux les comparer à une table pour searchr des correspondances. Toutes les suggestions sur la façon de faire correspondre quelque chose comme ceci:

La valeur entrante est quelque chose comme "JR Thompson Corporation" alors que la valeur est "The Jim Ryan Thompson Company" dans la database.

Dit simplement – cela ne peut pas être fait. Même la normalisation des adresses est complexe, et vous ne suivez que des règles spécifiques (Str, par exemple pour Street). Je faisais partie d'un projet en Allemagne il y a 15 ans et l'enfer s'est déchaîné, parce que certains endroits avaient des règles spéciales (m 4 = adresse valide dans une ville, par exemple, parce que le centre-ville est de type «rue»). des 14. Juillet Appartement 3 "a cassé notre" premier numéro est la fin de la rue "règles).

Le tout devient fou – dans votre exemple "JR" et "Jim Ryan" peuvent ou ne peuvent pas être les mêmes. Il y a quelques règles que vous pouvez configurer, et cela devient beaucoup plus facile avec les adresses (la même adresse signifie qu'à la fin le nom correspondant peut être plus lâche) mais en général ce n'est pas une approche réalisable. Même la correction orthographique n'attrapera pas cela. Il n'y a tout simplement aucun moyen de normaliser cela sans que l'intelligence artificielle ait access à Internet pour utiliser Google pour savoir si cela correspond. Oui, vous pouvez get un taux de succès de 20% ou 30%, mais cela vous laisse avec une tonne d'erreurs à gauche et à droite et est probablement less qu'inutile d'un sharepoint vue commercial.

Vous avez besoin d'au less un identifiant standard que vous pouvez utiliser pour définir la sélection. Numéros de maison, numéros de téléphone, tout ce qui peut être standardisé plus facile et fournit ensuite un nom pour le nom correspondant algo.

Sans faire de search de text intégral (qui est conçu pour faire ces choses), vous pouvez le faire simplement en remplaçant simplement les espaces et les périodes par des caractères generics% et en mettant% au début et à la fin de la string:

DECLARE @input VARCHAR(50) = 'JR Thompson Corporation' SELECT * FROM Company WHERE Name LIKE '%' + REPLACE(REPLACE(@input, '.', '%'), ' ', '%') + '%' 

Il est important de noter que toute search LIKE dans laquelle vous avez un symbole % ne bénéficiera pas d'un index sur cette colonne.

Notez que cela ne ramènera toujours pas des choses comme «entreprise» qui signifie «corporation» comme dans votre exemple.