0

会社名と数値の主キー ID を含むテーブルがあります。データをクリーンアップしており、名前列が同じ会社を表す類似の名前でいっぱいであることを発見しました。

例:BA と Ba または GTC Ltd と GTC Limited。

とにかく、SQLサーバーを使用して、類似した名前とIDのリストを持つすべてのアイテムの数と要約を取得できますか. しきい値を設定できる類似性の比較などがあるのではないかと思いました。

マージする必要があると思われる名前のリストをクライアントに提示する必要があります。

4

4 に答える 4

1

あなたの答えはSoundEx()andDifference()関数にあります。

DECLARE @a varchar(50) = 'BA'
      , @b varchar(50) = 'Ba'
;

SELECT @a
     , @b
     , SoundEx(@a)
     , SoundEx(@b)
     , Difference(@a, @b)
;

SET @a = 'GTC Ltd';
SET @b = 'GTC Limited';

SELECT @a
     , @b
     , SoundEx(@a)
     , SoundEx(@b)
     , Difference(@a, @b)
;

SET @a = 'BLAH';

SELECT @a
     , @b
     , SoundEx(@a)
     , SoundEx(@b)
     , Difference(@a, @b)
;

これはSoundEx「次のように聞こえます」 -他の出力と比較できる入力の表現を返す関数です。

このDifference()関数は 0 から 4 までの値を返します。数値が大きいほど一致が良好であることを表します。

于 2013-09-16T10:31:15.840 に答える
1

類似性をチェックするための関数がたくさんあります。MS SQL は、私が実際に使用したことのない関数を提供SOUNDEXします。DIFFERENCE

PHPでLevenshtein(string1をstring2に変換するための最小限の編集)を使用したことがありますが、非常に効率的でした。これは、コードに入れることができる関数としてのTSQLでのDevio の実装です。

SELECT 
    LEVENSHTEIN(COL1, COL2) 
FROM 
    ExampleTable

またはWHERE状態で:

SELECT 
    COL1, COL2
FROM
    ExampleTable
WHERE
    LEVENSHTEIN(COL1, COL2) < 5

ここでCASE - WHEN - THEN、必要な正しいレーベンシュタイン距離を見つけるために、いくつかのロジックを実装することをお勧めします。

于 2013-09-16T10:31:20.133 に答える
0

COLLATE UTF8_GENERAL_CIandLIKE演算子を 使用して を確認できますBA and Ba。ただしGTC Ltd and GTC Limited、同じものを引き続き使用できますが、手動でチェックして慎重にマージする必要があります。

于 2013-09-16T10:25:10.613 に答える