1

テーブルを含むSQLServerデータベースがありますaddress(a_id:int, street:nvarchar(50), apt:nvarchar(50), city:nvarchar(50), state:nvarchar(50), zip:int)

a_id特定のアドレスのを返すストアドプロシージャがあります。

SELECT
    address_id
FROM
     address a
WHERE
    street like '%'+ @street +'%'
    and apt like '%'+ @apt +'%'
    and zip = @zip

たとえば、私が入れた場合、私はまたはと同じもの1060 West Addison Street Chicago IL 60613を取得したいと思いますa_id1060 W Addison Street Chicago IL 606131060 W. Addison Street Chicago IL 60613

ご覧のとおり、略語とピリオドの違いを説明するために、列streetapt列の周りにワイルドカードを配置しようとしましたが、機能しません。

現在、最初の例のみがa_idを返します。これは、データベース内の内容と完全に一致するためです。

4

1 に答える 1

1

オペレーターは、LIKE期待どおりに機能しません。を使用するとLIKE %Addisson%、 と の両方が返されますが、入力が の場合は返されません。West AddisonW AddisonW AddisonWest Addisson

MSDNから:

% - Any string of zero or more characters. - WHERE title LIKE '%computer%' 
finds all book titles with the word 'computer' anywhere in the book title.

あなたのシナリオではfull tezxt index search、目的を達成できる可能性がある をチェックアウトすることをお勧めします。具体的には、次のCONSTAINABLEキーワードが役立ちます。

加重値を使用して語句を検索する(加重用語)

CONTAINSTABLE を使用して単語または語句を検索し、重み付け値を指定できます。重みは、0.0 から 1.0 までの数値として測定され、単語とフレーズのセット内の各単語とフレーズの重要性を示します。重み 0.0 が最も低く、重み 1.0 が最も高くなります。

次の例は、重みを使用してすべての顧客の住所を検索するクエリを示しています。このクエリでは、"Bay" という文字列で始まるすべてのテキストに "Street" または "View" が含まれています。結果は、指定された単語をより多く含む行に高いランクを与えます。

USE AdventureWorks2012 GO

SELECT AddressLine1, KEY_TBL.RANK  FROM Person.Address AS Address
INNER JOIN CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT
("Bay*", 
         Street WEIGHT(0.9), 
         View WEIGHT(0.1)
         ) ' ) AS KEY_TBL ON Address.AddressID = KEY_TBL.[KEY] ORDER BY 
KEY_TBL.RANK DESC GO

加重用語は、任意の単純用語、接頭用語、生成用語、または近接用語と組み合わせて使用​​できます。

ソース:全文検索によるクエリ

于 2012-11-07T06:05:58.293 に答える