2016-11-07 112 views
4

我想創建這將能夠使用一個短語的話在我的「標準」(像谷歌一樣)搜索使用短語SQL Server查詢

例一查詢詞: 我的一句話: '富酒吧測試'

我的數據庫表:

|柱|

'嗨吧'

'測試吧'

'嗨富'

'這裏沒有'

'再富'

結果,我很等待:

|專欄|

'嗨吧'

'測試吧'

'嗨富'

'富再次'

+1

查閱SQL Server的全文功能。 –

+0

您可以使用「LIKE」運算符。例如:你想在表格中還是在所有列中的一列中搜索WHERE COLUMN LIKE'%Foo%'或COLUMN LIKE'%Bar%'或COLUMN LIKE'%Test%' –

+0

? – GuidoG

回答

1

實現任何分裂/解析功能,可以幫助

Declare @YourTable table (YourFieldName varchar(100)) 
Insert Into @YourTable values 
('Hi Bar'), 
('Test Ba'), 
('Hi Foo'), 
('Nothing here'), 
('Foo again') 

Declare @SearchString varchar(max) = 'Foo Bar Test' 

Select A.* 
From @YourTable A 
Join [dbo].[udf-Str-Parse](@SearchString,' ') B 
    on Charindex(RetVal,YourFieldName)>0 

返回

YourFieldName 
Hi Foo 
Foo again 
Hi Bar 
Test Ba 

UDF如果需要

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10)) 
Returns Table 
As 
Return ( 
    Select RetSeq = Row_Number() over (Order By (Select null)) 
      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))) 
    From (Select x = Cast('<x>'+ Replace(@String,@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A 
    Cross Apply x.nodes('x') AS B(i) 
); 
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',') 
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ') 
1

您可以使用SQL Server FULL Text Index做到這一點。可以用分割字符串函數以及

Declare @str varchar(500) = 'Foo Bar Test' 

SELECT distinct tc.* 
FROM (VALUES ('Hi Bar'), 
       ('Test Bar'), 
       ('Hi Foo'), 
       ('Nothing here'), 
       ('Foo again')) tc (columnss) 
     JOIN [dbo].[Delimitedsplit8k](@str, ' ') f 
     ON columnss LIKE '%' + f.Item + '%' 

要創建拆分字符串函數檢查此鏈接http://www.sqlservercentral.com/articles/Tally+Table/72993/

+1

這不是一個'和'的條件,而不是OP想要什麼? –

+0

我不明白這將如何工作.. – sagi

+0

@sagi - yep完全在看它 –