2012-02-20 8 views
2

私はSQL Server 2005を使用しています。システムに名前が入っていて、テーブルと比較して一致するものを探したいと思っています。SQL Server - 名前内の一致を検索

到着する値は、 "J.R. Thompson Corporation" のようなもので、値は "The Jim Ryan Thompson Company"のようなものです。

+1

フルテキスト検索の同義語を設定する必要があります。http://msdn.microsoft.com/en-us/library/ms142571.aspx –

+0

DIFFERENCE(http ://msdn.microsoft.com/en-us/library/ms188753.aspx)これらの文字列ペアのすべてで、DESCendingを注文します。 –

答えて

-1

これらのことを行うために設計されたフルテキスト検索をせずに、これを簡単な方法で実行し、空白とピリオドを%ワイルドカードに置き換えて%文字列は:

DECLARE @input VARCHAR(50) = 'J.R. Thompson Corporation' 

SELECT * 
FROM Company 
WHERE Name LIKE '%' + REPLACE(REPLACE(@input, '.', '%'), ' ', '%') + '%' 

あなたがその列のインデックスから利益を得られないだろう有数%シンボルを持つLIKE検索の任意の並べ替えを行うことに注意することが重要です。 。

注これはまだあなたの例のように会社を 『「意味』「会社のようなものをピックアップしません

+0

これは、OPが提供する入力では機能しません。 「JR」と「ジムライアン」は一致しません。 –

+0

実際にそれはJRと一緒に働くでしょう(OPは.JとRの間にあります。これがなければ、いいえ)とJimRyanは '%J%R%'になるので、会社と私が底に言うように。 – Seph

+0

これは非常に具体的な例でした。それが逆転した場合、JimRyanのパラメータがJ.R.を見つけたかったのですが?私はあなたが何が要求されているかを完全に把握しているとは思わない - これは類似の問題ではなく、同義語/あいまい検索の問題です。 –

0

単純に言った - それは行うことができなくても正規のアドレスが複雑で、そこだけ特定従ってください。私は15年前にドイツでそれをやっているプロジェクトにいましたが、地獄のように壊れてしまいました - ある場所には特別なルールがありました。 "Strasse des 14. July Appartement 3"が "最初の数値は通りの名前の終わり"の規則を破ったため)

あなたのサンプル "JR"と "ジムライアン "は同じかもしれません。あなたが設定できるルールがいくつかありますが、アドレスの方がずっと簡単です(同じアドレスは最後に名前の一致が緩くなることを意味します)が、一般的にこれは再考可能な方法ではありません。スペルの修正でさえそれをキャッチしません。それが一致するかどうかを見つけるためにGoogleを使用するインターネットアクセスを持つ人工知能なしでそれを正規化する方法は単にありません。はい、あなたは20%または30%のヒット率を得ることはできますが、それは左右にTONのエラーが残っており、ビジネスの観点からは役に立たない可能性は低いです。

少なくとも1つの標準化された識別子が必要です。ハウスナンバー、電話番号、標準化が容易なもの、それからアルゴに合致する名前のアンカーを提供します。

関連する問題