2016-02-18 52 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 

。希望可以幫助別人太:) 我的一個同事幫我,所以感謝他。