我有一个包含表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 60613
相同的1060 W. Addison Street Chicago IL 60613
正如您所看到的,我尝试在street
和apt
列周围放置外卡以说明缩写和句点的差异,但它不起作用。
目前只有第一个示例返回a_id
,因为这与db中的内容完全匹配
答案 0 :(得分:1)
LIKE
运算符无法正常工作。如果您使用LIKE %Addisson%
,则会同时返回West Addison
和W Addison
,但如果输入为W Addison
,则无法返回West 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
加权术语可以与任何简单术语一起使用, 前缀术语,生成术语或邻近术语。