0

我有一个名为“comments”的列,并希望在“comments”列中查找包含字符串的所有记录,这些字符串是同一列中任何其他单元格的确切子字符串。这些确切的子字符串必须是完整的单词,即它们应该与作为子字符串的字符串的其余部分用空格分隔。

我想我需要使用类似于数组函数的东西。这在 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
)

这将查找在同一列的另一个值中被空格包围的值(单词或短语),或者位于同一列的另一个值的开头或结尾。

这个特定的例子只产生一个结果:

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 回答