2009-10-02 158 views
1

好吧,所以我正在進行基本搜索SPROC。 參數之一是一個搜索文本(這將是測試用戶輸入,單詞由空格等分開)'簡單'SQL搜索查詢

現在我需要的是在表中的單個列上搜索這些單詞,但我希望它具有所有輸入的關鍵字(目前我所能做的就是如果其中一個存在)

那麼是否有一個特殊的SQL命令允許我這樣做?

+0

問題與2個答案是搜索詞總是會有所不同。我可以將這些詞彙轉換成表格,但是我仍然不太確定如何搜索它們,因爲我可以在該表格上做一個IN,但這仍然是同樣的問題... – dkarzon

回答

2

你可以嘗試這樣的事情

檢查所需要的話occurances,並比較分裂的話計數。

所有的問題,我預見是匹配部分單詞,但是這可能讓你開始

/* 
ALTER FUNCTION [dbo].[SplitString] 
(
     @String VARCHAR(8000) , 
     @Delimiter VARCHAR(10) 
) 
RETURNS @RetTable TABLE(
     String varchar(1000) 
) 
AS 
BEGIN 
    DECLARE @i INT , 
      @j INT 
    SELECT @i = 1 
    WHILE @i <= LEN(@String) 
    BEGIN 
     SELECT @j = CHARINDEX(@Delimiter, @String, @i) 
     IF @j = 0 
     BEGIN 
      SELECT @j = LEN(@String) + 1 
     END 
     INSERT @RetTable SELECT SUBSTRING(@String, @i, @j - @i) 
     SELECT @i = @j + LEN(@Delimiter) 
    END 
    RETURN 
END 
*/ 

DECLARE @SearchString VARCHAR(MAX) 

SELECT @SearchString = 'your,of' 

DECLARE @SearchStringTable TABLE(
     Words VARCHAR(MAX) 
) 

DECLARE @TABLE TABLE(
     Col VARCHAR(MAX) 
) 

INSERT INTO @TABLE (Col) 
SELECT 
'On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document.' 
INSERT INTO @TABLE (Col) 
SELECT 
'You can use these galleries to insert tables, headers, footers, lists, cover pages, and other document building blocks.' 
INSERT INTO @TABLE (Col) 
SELECT 
'When you create pictures, charts, or diagrams, they also coordinate with your current document look.' 

INSERT INTO @SearchStringTable (Words) SELECT * FROM dbo.SplitString(@SearchString,',') 

SELECT t.Col, 
     COUNT(1) AS Number 
FROM @TABLE t, 
     @SearchStringTable s 
WHERE CHARINDEX(s.Words,t.Col) > 0 
GROUP BY t.Col 
HAVING COUNT(1) = (SELECT COUNT(1) FROM @SearchStringTable) 
+0

這似乎工作得很好!謝謝! – dkarzon

0

您需要將@SEARCH_TEXT拆分爲單詞並理想地將其存儲在臨時表@FILTER_TABLE中,其中包含單詞的一列WORD。你可以谷歌的「SQL逗號分割...」,但回答this question可能會有所幫助。 This也很有趣。

然後,您只需在您的查詢中使用JOIN來過濾行。最簡單的查詢,那麼這將返回所有的比賽將是:

SELECT t.* 
     f.WORD 
FROM MyTable t 
JOIN @FILTER_TABLE f 
    ON t.MyColumn = f.WORD --// = or LIKE operator 

但是,如果你提供你的數據和預期結果的例子,人們可能會更有幫助。