0

这是我的困惑。我有一个包含一段文本的变量,并且有一列充满了关键字。我想根据我的变量中包含的整个文本来搜索列中包含的每个关键字。

我知道如何做到这一点的唯一方法是一次选择一列的每一行,然后在每一侧使用带有通配符的 LIKE 运算符来查看列中的关键字是否在文本中的任何位置找到多变的。我尝试这样做的每一种方式最终都显得非常低效。

另一种看待这个问题的方式是,如果我可以颠倒像 FREETEXT 这样的运算符的顺序来执行类似 FREETEXT(@input, keywords) 的操作,那就太棒了。但我似乎无法想出一种方法来简单有效地做到这一点。

关于如何尽可能有效地做到这一点的任何提示?我非常感谢您的帮助!

编辑:

这是我的存储过程,供参考:

GO
    @input varchar(1000),
    @debug varchar(25) output

AS
BEGIN

    SELECT TOP 1 @debug = kw.keyword
    FROM (SELECT @input input) bigstring
    INNER JOIN table1 kw 
    on bigstring.input LIKE '%' + kw.keyword + '%'

END
4

1 回答 1

1

这里有两种方法,具体取决于您要做什么(假设FREETEXT关键字中的 SQL 2005+)。示例数据之后的第一个选择返回关键字的索引(如果您不想要找不到的关键字,请过滤掉零)。第二个只是检查存在

Declare @keywords  as table (keyword varchar(50))
INSERT INTO @keywords 
VALUES ('quandary'),
       ('variable'),
       ('paragraph'),
       ('Narwhal')


DECLARE @input as varchar(max)
SET @input = 'Heres my quandary. I have a variable that contains a paragraph of text, and I have a column full of keywords. I want to search each of the keywords contained in the column against the entirety of the text contained within my variable'


SELECT keyword, CHARINDEX(keyword, @input , 0)
FROM @keywords

SELECT kw.keyword
FROM 
(SELECT @input input) bigstring
INNER JOIN @keywords kw 
on bigstring.input like '%' + kw.keyword + '%'



(4 row(s) affected)
keyword                                            
----------------------- --------------------
quandary                10
variable                29
paragraph               54
Narwhal                 0

(4 row(s) affected)

keyword
-----------------------
quandary
variable
paragraph

(3 row(s) affected)

如果也有 CROSS APPLY 解决方案,我不会感到惊讶

更新 仅获取第一个关键字作为输出参数

数据

CREATE TABLE table1 (keyword varchar(50))
INSERT INTO table1 
VALUES ('quandary'),
       ('variable'),
       ('paragraph'),
       ('Narwhal')

GO

过程

CREATE  proc testKeyword
        @input varchar(1000),
        @debug varchar(25) output

    AS
    BEGIN

        SELECT TOP 1 @debug = kw.keyword
        FROM (SELECT @input input) bigstring
        INNER JOIN table1 kw 
        on bigstring.input LIKE '%' + kw.keyword + '%'

    END

测试

DECLARE @debug varchar(25)
EXEC testKeyword 'Heres my quandary. I have a variable that contains a paragraph of text, and I have a column full of keywords. I want to search each of the keywords contained in the column against the entirety of the text contained within my variable',
           @debug out 

SELECT @debug 

outputs 


-------------------------
quandary

(1 row(s) affected)
于 2011-11-10T18:50:17.533 回答