LIKE 子句中的无序词匹配 T-SQL
Unordered words matching in LIKE clause T-SQL
因为我不能评论这个post:MySql: unordered words matching in like clause
因为我的 Whosebug 声誉点数很低,而且 "answer" 明确表示不要要求澄清、帮助等。我必须提出自己的问题。
情况:
我正在使用 T-SQL,我制作了一个存储过程,其视图为 Table,在此 table 中是一个包含 3 个字段数据的列(姓氏+名字+身份证)作为搜索列。
我的 C# 应用程序将 searchString 传递到我的存储过程中,该字符串始终以 % 开头,所有空格都被 % 替换。
结果应该是获取 searchColumn 包含 searchString 输入的所有行。
所以当搜索字符串是%mai%han%19%
它应该给我所有姓氏包含 mai、名字包含 han 且 id 包含 19 的人。
好吧,到目前为止一切正常。
问题是,当 searchString 包含 %19%han%mai% 时,它不再起作用,因为它的顺序不正确。
问题:
所以问题是(就像 link 我有 postet)
like 子句中的无序词匹配?
但与link不同的是,解应该在T-SQL.
有人知道怎么做吗?
提前致谢
萨布丽娜
完全满足目标的另一个解决方案:
ALTER PROCEDURE [dbo].[DATABASE]
@searchfield NVARCHAR(1000)
AS
BEGIN
declare @sql varchar(2000)
declare @search varchar(500), @count int, @part varchar(500), @rest varchar(500)
set @count = 0
set @search = @searchfield
set @part = (substring(@search,0,@count))
set @rest = (substring(@search,@count+1,len(@search)))
set @sql = 'select * from [dbo].[DATABASE]'
set @count = charindex('%', @search)
set @part = (substring(@search,0,@count))
set @rest = (substring(@search,@count+1,len(@search)))
set @sql = @sql + ' where searchString like ''%'+ @part +'%'''
if(@count > 1 AND @count != 1)
BEGIN
WHILE (@count != 0)
BEGIN
set @count = CHARINDEX('%', @rest)
set @part = (SUBSTRING(@rest, 0, @count))
set @rest = (SUBSTRING(@rest, @count+1, len(@rest)))
set @sql = @sql + ' AND searchString like ''%' + @part + '%'''
END
END
SET NOCOUNT ON;
EXEC (@sql)
END
希望这对其他人也有帮助 :)
我的一位同事帮助了我,非常感谢他。
因为我不能评论这个post:MySql: unordered words matching in like clause
因为我的 Whosebug 声誉点数很低,而且 "answer" 明确表示不要要求澄清、帮助等。我必须提出自己的问题。
情况:
我正在使用 T-SQL,我制作了一个存储过程,其视图为 Table,在此 table 中是一个包含 3 个字段数据的列(姓氏+名字+身份证)作为搜索列。 我的 C# 应用程序将 searchString 传递到我的存储过程中,该字符串始终以 % 开头,所有空格都被 % 替换。 结果应该是获取 searchColumn 包含 searchString 输入的所有行。 所以当搜索字符串是%mai%han%19% 它应该给我所有姓氏包含 mai、名字包含 han 且 id 包含 19 的人。 好吧,到目前为止一切正常。 问题是,当 searchString 包含 %19%han%mai% 时,它不再起作用,因为它的顺序不正确。
问题: 所以问题是(就像 link 我有 postet) like 子句中的无序词匹配? 但与link不同的是,解应该在T-SQL.
有人知道怎么做吗?
提前致谢 萨布丽娜
完全满足目标的另一个解决方案:
ALTER PROCEDURE [dbo].[DATABASE]
@searchfield NVARCHAR(1000)
AS
BEGIN
declare @sql varchar(2000)
declare @search varchar(500), @count int, @part varchar(500), @rest varchar(500)
set @count = 0
set @search = @searchfield
set @part = (substring(@search,0,@count))
set @rest = (substring(@search,@count+1,len(@search)))
set @sql = 'select * from [dbo].[DATABASE]'
set @count = charindex('%', @search)
set @part = (substring(@search,0,@count))
set @rest = (substring(@search,@count+1,len(@search)))
set @sql = @sql + ' where searchString like ''%'+ @part +'%'''
if(@count > 1 AND @count != 1)
BEGIN
WHILE (@count != 0)
BEGIN
set @count = CHARINDEX('%', @rest)
set @part = (SUBSTRING(@rest, 0, @count))
set @rest = (SUBSTRING(@rest, @count+1, len(@rest)))
set @sql = @sql + ' AND searchString like ''%' + @part + '%'''
END
END
SET NOCOUNT ON;
EXEC (@sql)
END
希望这对其他人也有帮助 :) 我的一位同事帮助了我,非常感谢他。