2016-02-18 50 views
1

因为我不能在此留言无序话:MySql: unordered words matching in like clauseLIKE语句匹配的T-SQL

,因为我的低计算器声望点,和“答案”明确表示不要求澄清,帮助等我开辟我自己的问题。

现状:使用T-SQL

I'm,从来就由存储过程与查看表,该表内是包含3个字段(姓+给定名称+ ID的数据的列)作为searchColumn。 我的C#应用​​程序传递一个searchString到我的存储过程中,字符串总是以%开头,所有空格都被%替换。 结果应该是在searchColumn包含searchString的输入的所有行中生成的。 因此,当搜索字符串是%mai%han%19% 它应该给我所有的人,其中姓氏包含mai,givenname包含韩和id包含19. 那么,这是迄今为止工作正常。 问题是,当searchString包含%19%han%mai%时,它不再起作用,因为它不是正确的顺序。

问题: 所以问题是(如链接我是postet) 无序的单词匹配在like子句中? 但与链接不同,解决方案应该在T-SQL中。

有没有人有线索如何做到这一点?

预先感谢您 萨布丽娜

回答

-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 

。希望可以帮助别人太:) 我的一个同事帮我,所以感谢他。