'简单'SQL搜索查询

时间:2009-10-02 05:03:01

标签: sql sql-server search

好的,所以我正在进行基本搜索SPROC。 其中一个参数是搜索文本(这将是用户输入的测试,由空格分隔的单词等。)

现在我需要的是在表格中的单个列上搜索这些单词,但我希望它包含所有输入的关键字(目前我所能做的就是其中一个是否存在)

那么有一个特殊的SQL命令允许我这样做吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情

检查所需单词的出现次数,并与拆分单词的数量进行比较。

我发现的所有问题都与部分单词匹配,但这可能会让你开始

/*
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)

答案 1 :(得分: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

但是,如果您提供数据和预期结果的示例,那么人们可能会更有帮助。