1

我有一个包含表的 SQL Server 数据库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_id相同的结果1060 W Addison Street Chicago IL 606131060 W. Addison Street Chicago IL 60613

street如您所见,我尝试在and列周围放置通配符apt以说明缩写和句点的差异,但它不起作用。

目前只有第一个示例返回一个a_id,因为这与数据库中的内容完全匹配

4

1 回答 1

1

LIKE操作员不会像您希望的那样工作。如果使用LIKE %Addisson%,它会同时返回West Addisonand ,但如果输入是W Addison,它就不能返回。W 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 回答