2015-04-17 104 views
1

我有一個帶有名字,姓氏,城市和streetadress以及用戶可以在表格中搜索的Web gui的人員表格。如何使用全文搜索在多列上進行過濾

假設表中包含4行,如:

Eva, Andersson, Stockholm, Kungsgatan 3 
Adam, Johansson, Kiruna, Malmgatan 33a 
Eva, Berquist, Kiruna, Gruvgatan 22 
Adam, Stenberg, Kiruna, Lappfogdegatan 2 

如果伊娃·安德森斯德哥爾摩,他的用戶搜索/她shold只得到「伊娃,安德森,斯德哥爾摩,國王街3」一炮打響,而不是「伊娃,伯奎斯特,基律納,格魯夫加坦22」。但是搜索Adam Kiruna或者Eva應該返回兩個點擊。

眼下的過程如下:

ALTER PROCEDURE [dbo].[getPersons] 
@Search nvarchar(50) 

AS 
BEGIN 

    SET NOCOUNT ON; 
    DECLARE @SearchString varchar(100) 

    SET @SearchString = REPLACE(@Search, ' ', '*" OR "') 
    SET @SearchString = '"'[email protected]+'*"' 

    SELECT * FROM patients as p 
    WHERE CONTAINS((Firstname, LasnName, City, Streetadress), @SearchString) 
END 

但它返回一個包含任何字所以搜索「Berquist的伊娃基律納」將返回所有四行所有行。

我該如何編寫程序以獲得如上所述的正確結果?

回答

0

這是我的答案,請記住,在查詢服務器之前,您需要執行一些過程流程。這裏

Select * from Persons_Table where first_name = Eva AND Last_name = .... 

就是這樣的。

+0

問題是我現在沒有多少空格分開搜索字符串包含的術語或它們的順序。例如,它可以是「名城」或「城市姓氏名」。所以我不明白如何用簡單的where子句做到這一點。如果你認爲有可能以這種方式完成,請詳細說明你是一個例子。 – user2858330

+0

那麼,在將數據插入表格之前,您需要將其過濾掉。或者你將需要一個SQL查詢中一個非常複雜的邏輯。 –

+0

數據分離在單獨的列中,但搜索參數不是。那是你的意思還是你的意思是搜索參數。對它進行過濾是不可能的,例如查爾斯·林德伯格的搜查應該可以使查爾斯在林德伯格村或查爾斯林德伯格飛越大西洋海。那就是如果它們存在於數據庫當然。 – user2858330

相關問題