4

Locations 検索ページは、これまで遭遇したことのない課題をもたらしています。

私たちのデータベースには、対応するジオコードを含む都市、州などのリストがあります。今までみんな楽しそうに働いていた...

「ウィスコンシン州ブラック リバー フォールズ」という名前の都市に 2 つの場所があり、最近「ウィスコンシン州リバー フォールズ」に 1 店舗をオープンしました。

したがって、テーブルには次のようなレコードがあります。

Location    City                State
-------------------------------------
1           Black River Falls   WI
2           Black River Falls   WI
3           River Falls         WI

明らかに、このクエリでは「LIKE」句を使用して都市と一致させていますが、顧客がテキスト「River Falls」を検索すると、検索結果で最初に表示される結果は常に「Black River Falls」です。

このアプリケーションでは、常に最初に一致したものを使用し、それをデフォルトとして使用します。(変更することはできますが、予算外の作業が多くなります)

「River Falls」が最初に表示されるように並べ替え順序を簡単に変更できることはわかっていますが、それはずさんな解決策であり、この 1 つのケースでのみ機能します。

私が疑問に思っているのは、T-SQL (SQL Server 2008r2) を使用して、"River Falls, WI" と "Black "Black River Falls" WI を検索すると、"River Falls" が機能します。

4

2 に答える 2

5

このような:

;WITH cte As
(
    SELECT  *
        ,   ROW_NUMBER() OVER(ORDER BY LEN(City)-LEN(@UserText)) As MatchPrio
    FROM    Cities
    WHERE   City LIKE '%'+@UserText+'%'
)
SELECT *
FROM    cte
WHERE   MatchPrio = 1

アップデート:

上記の ORDER BY 式を変更して、DIFFERENCE(..)またはその他の条件の組み合わせを使用することもできます。

于 2013-08-26T21:53:38.623 に答える