会社名と数値の主キー ID を含むテーブルがあります。データをクリーンアップしており、名前列が同じ会社を表す類似の名前でいっぱいであることを発見しました。
例:BA と Ba または GTC Ltd と GTC Limited。
とにかく、SQLサーバーを使用して、類似した名前とIDのリストを持つすべてのアイテムの数と要約を取得できますか. しきい値を設定できる類似性の比較などがあるのではないかと思いました。
マージする必要があると思われる名前のリストをクライアントに提示する必要があります。
会社名と数値の主キー ID を含むテーブルがあります。データをクリーンアップしており、名前列が同じ会社を表す類似の名前でいっぱいであることを発見しました。
例:BA と Ba または GTC Ltd と GTC Limited。
とにかく、SQLサーバーを使用して、類似した名前とIDのリストを持つすべてのアイテムの数と要約を取得できますか. しきい値を設定できる類似性の比較などがあるのではないかと思いました。
マージする必要があると思われる名前のリストをクライアントに提示する必要があります。
あなたの答えは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 までの値を返します。数値が大きいほど一致が良好であることを表します。
類似性をチェックするための関数がたくさんあります。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、必要な正しいレーベンシュタイン距離を見つけるために、いくつかのロジックを実装することをお勧めします。
COLLATE UTF8_GENERAL_CIandLIKE演算子を 使用して を確認できますBA and Ba。ただしGTC Ltd and GTC Limited、同じものを引き続き使用できますが、手動でチェックして慎重にマージする必要があります。