目的に応じて 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)