2

基準を使用して検索する必要がある一連のレコードがあります。しかし、基準は私に複数の行を返しています。

したがって、条件一致の割合が最大になっている上位 2 つのレコードが必要です。

私はファジー ロジックに取り組みましたが、このような単純な問題には複雑すぎることがわかりました。以下のようなシナリオがあります。

SELECT DISTINCT FirstName, LastName, CountryName, StateName FROM Employee

たとえば、上記の 1 つが 5 つのレコードを返すとします。

私が望むのは、「%Gujarat%」のような州名と「%India%」のような国名が 5 つ以上のレコードと一致するパーセンテージを見つけることができる「like」演算子を使用することです。

この一致率を取得したら、一致率が最も高い上位 2 つのレコードを選択します。

これにより、ある程度正確なデータを取得できます。

SQLサーバーを使用するアイデアはありますか?

4

3 に答える 3

2

私が理解している限り、レーベンシュタイン距離アルゴリズムを使用したあいまい文字列マッチングのようなものが必要です。リンクがお役に立てば幸いです。

CountryNameと検索パターンの間の距離を計算する必要があります。これは正確には「パーセンテージ」ではありませんが、関連性を測定することはできます。

多分これはあなたの問題を解決しますか?

SELECT TOP 2 FirstName, LastName, CountryName, StateName 
FROM Employee
WHERE
    statename like '%Gujarat%' AND countryname like '%India%'
ORDER BY
    dbo.edit_distance(statename, 'Gujarat') + dbo.edit_distance(CountryName, 'India') DESC
于 2012-04-10T14:03:30.857 に答える
0

全文検索を使用できます。containsTableを使用すると、レコードが検索パターンにどのように適合するかを説明する各レコードのRANKを取得できます。次に、そのランクで結果を並べ替えてから、を使用select top Nして最良のN個の結果のみを取得できます。

全文検索の実装は、特にあなたのような単純なクエリが必要な場合は、簡単かつ迅速に実行できます。

資力:

それが役に立てば幸い。

于 2012-04-10T14:45:18.863 に答える
0

解決策がうまくいかなかった場合、

だから私は自分のロジックを作成しました:

SELECT TOP 2 FirstName, LastName, CountryName, StateName 
FROM Employee
WHERE
    statename like '%Gujarat%' AND countryname like '%India%'
ORDER BY
    LEN(StateName + CountryName) - LEN(REPLACE(StateName, 'Gujarat', '') + REPLACE(CountryName, 'India', '')) DESC

この助けを願って...

于 2013-10-18T15:46:50.033 に答える