Sql server 存储过程中的通配符
我有一个SQL Server数据库,其中包含一个表Sql server 存储过程中的通配符,sql-server,stored-procedures,ssms,Sql Server,Stored Procedures,Ssms,我有一个SQL Server数据库,其中包含一个表地址(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
地址(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西艾迪生街芝加哥IL 60613
,我希望获得与1060西艾迪生街芝加哥IL 60613
或1060西艾迪生街芝加哥IL 60613
相同的a_id
如您所见,我尝试在street
和apt
列中放置通配符,以解释缩写和句点的差异,但它不起作用
目前只有第一个示例返回
a_id
,因为这与数据库中的内容完全匹配类似操作符的工作方式与您希望的不同。如果使用如%Addison%
,它将同时返回West Addison
和W Addison
,但如果输入为West Addison
,它将无法返回W Addison
发件人:
对于您的场景,您可能希望签出full-tezxt-index-search
,这可能允许您实现目标。具体来说,CONSTAINABLE
关键字可能会帮助您:
使用加权值(加权项)搜索单词或短语
您可以使用CONTAINSTABLE搜索单词或短语并指定
权重值。重量,以0.0到1.0之间的数字测量,
指示一组单词中每个单词和短语的重要性
和短语。权重0.0是最低的,权重1.0是最低的
最高的
以下示例显示搜索所有客户的查询
地址,使用权重,其中任何以字符串开头的文本
“Bay”有“Street”或“View”。结果给了一个更高的排名
包含更多指定单词的行
加权项可与任何简单项结合使用,
前缀项、生成项或邻近项
来源:类似的操作符不能像您希望的那样工作。如果使用如%Addison%
,它将同时返回West Addison
和W Addison
,但如果输入为West Addison
,它将无法返回W Addison
发件人:
对于您的场景,您可能希望签出full-tezxt-index-search
,这可能允许您实现目标。具体来说,CONSTAINABLE
关键字可能会帮助您:
使用加权值(加权项)搜索单词或短语
您可以使用CONTAINSTABLE搜索单词或短语并指定
权重值。重量,以0.0到1.0之间的数字测量,
指示一组单词中每个单词和短语的重要性
和短语。权重0.0是最低的,权重1.0是最低的
最高的
以下示例显示搜索所有客户的查询
地址,使用权重,其中任何以字符串开头的文本
“Bay”有“Street”或“View”。结果给了一个更高的排名
包含更多指定单词的行
加权项可与任何简单项结合使用,
前缀项、生成项或邻近项
资料来源:
% - Any string of zero or more characters. - WHERE title LIKE '%computer%'
finds all book titles with the word 'computer' anywhere in the book title.
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