0

「コメント」という列があり、同じ列の他のセルの正確な部分文字列である「コメント」列の文字列を含むすべてのレコードを検索したいと考えています。これらの正確な部分文字列は単語全体である必要があります。つまり、部分文字列である文字列の残りの部分からスペースで区切る必要があります。

配列関数に似たものを使用する必要があると思います。これは SQL Server 2005 でどのように可能ですか?

4

2 に答える 2

1

おそらく次のようなものです:

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

控えめに言っても、このクエリはあまり効率的ではありませんが、うまくいけば、あなたや他の誰かがより良いアイデアを思いつくきっかけになるかもしれません。

于 2012-05-21T18:21:36.283 に答える
0

漠然とした仕様からの大まかな推測:

SELECT col1, col2, col3, comments
  FROM dbo.your_table
  WHERE comments LIKE '% ' + col1 + ' %'
     OR comments LIKE '% ' + col2 + ' %'
     OR comments LIKE '% ' + col3 + ' %';

これは印象的なパフォーマンスではないことに注意してください。

于 2012-05-21T15:42:20.840 に答える