因为我无法对此帖发表评论:MySql: unordered words matching in like clause
因为我的堆栈溢出信誉点很低,而且“回答”明确表示不要求澄清,帮助等等。我必须提出自己的问题。
情况:
我正在使用T-SQL,我使用View作为表创建了一个存储过程,在此表中是一个包含3个字段(姓氏+给定名称+ id)的数据作为searchColumn的列。 我的C#Application将searchString传递给我的存储过程,字符串总是以%开头,所有空格都被%替换。 结果应该是查找searchColumn包含searchString输入的所有行。 所以当搜索字符串是%mai%han%19% 它应该给我所有姓氏包含mai的人,givenname包含han,id包含19。 嗯,到目前为止这个工作正常。 问题是,当searchString包含%19%han%mai%时,它不再起作用,因为它不是正确的顺序。
问题: 所以问题是(就像我提出的链接) 在like子句中匹配的无序单词? 但是与链接不同,解决方案应该是T-SQL。
有人知道如何做到这一点吗?
提前谢谢你 塞布丽娜
答案 0 :(得分:-1)
完全达到目标的另一种解决方案:
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
希望也可以帮助别人:) 我的一位同事帮助了我,谢谢他。