0

これが私の困惑です。テキストの段落を含む変数があり、キーワードでいっぱいの列があります。列に含まれる各キーワードを、変数に含まれるテキスト全体に対して検索したいと考えています。

これを行う方法を私が知っている唯一の方法は、列の各行を一度に 1 つずつ選択し、両側にワイルドカードを指定した LIKE 演算子を使用して、列のキーワードがテキスト内のどこかにあるかどうかを確認することです。変数。私がこれを試みて行うすべての方法は、非常に非効率的であるように見えます。

これを別の見方で見ると、FREETEXT のような演算子の順序を逆にして、FREETEXT(@input, キーワード) のようなことを行うことができれば、それは素晴らしいことです。しかし、そのように簡単かつ効率的にそれを行う方法を理解できないようです。

これをできるだけ効率的に行うためのヒントはありますか? 助けてくれてとても感謝しています!

編集:

参考までに、これが私のストアドプロシージャです。

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

目的に応じて 2 つの方法があります (キーワードから SQL 2005+ を想定FREETEXT)。サンプル データの後の最初の選択では、キーワードのインデックスが返されます (見つからないキーワードが必要ない場合は、ゼロを除外します)。2番目は存在をチェックするだけです

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 ソリューションがあったとしても驚かない

更新 out パラメーターとして最初のキーワードのみを取得する

データ

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 に答える