「コメント」という列があり、同じ列の他のセルの正確な部分文字列である「コメント」列の文字列を含むすべてのレコードを検索したいと考えています。これらの正確な部分文字列は単語全体である必要があります。つまり、部分文字列である文字列の残りの部分からスペースで区切る必要があります。
配列関数に似たものを使用する必要があると思います。これは SQL Server 2005 でどのように可能ですか?
「コメント」という列があり、同じ列の他のセルの正確な部分文字列である「コメント」列の文字列を含むすべてのレコードを検索したいと考えています。これらの正確な部分文字列は単語全体である必要があります。つまり、部分文字列である文字列の残りの部分からスペースで区切る必要があります。
配列関数に似たものを使用する必要があると思います。これは SQL Server 2005 でどのように可能ですか?
おそらく次のようなものです:
WITH data (id, str) AS (
SELECT 1, 'some' UNION ALL
SELECT 2, 'thing' UNION ALL
SELECT 3, 'somethings' UNION ALL
SELECT 4, 'something else' UNION ALL
SELECT 5, 'two things' UNION ALL
SELECT 6, 'twenty two things'
)
SELECT str
FROM data d
WHERE EXISTS (
SELECT *
FROM data
WHERE str LIKE '%' + d.str + '%'
AND str NOT LIKE '%[^ ]' + d.str + '%'
AND str NOT LIKE '%' + d.str + '[^ ]%'
AND id <> d.id
)
これにより、同じ列の別の値のスペースで囲まれた値 (単語または語句)、または同じ列の別の値の先頭または末尾にある値 (単語または語句) が検索されます。
この特定の例では、結果が 1 つだけ生成されます。
str
----------
two things
控えめに言っても、このクエリはあまり効率的ではありませんが、うまくいけば、あなたや他の誰かがより良いアイデアを思いつくきっかけになるかもしれません。
漠然とした仕様からの大まかな推測:
SELECT col1, col2, col3, comments
FROM dbo.your_table
WHERE comments LIKE '% ' + col1 + ' %'
OR comments LIKE '% ' + col2 + ' %'
OR comments LIKE '% ' + col3 + ' %';
これは印象的なパフォーマンスではないことに注意してください。