我有一个名为“comments”的列,并希望在“comments”列中查找包含字符串的所有记录,这些字符串是同一列中任何其他单元格的确切子字符串。这些确切的子字符串必须是完整的单词,即它们应该与作为子字符串的字符串的其余部分用空格分隔。
我想我需要使用类似于数组函数的东西。这在 SQL Server 2005 中怎么可能?
我有一个名为“comments”的列,并希望在“comments”列中查找包含字符串的所有记录,这些字符串是同一列中任何其他单元格的确切子字符串。这些确切的子字符串必须是完整的单词,即它们应该与作为子字符串的字符串的其余部分用空格分隔。
我想我需要使用类似于数组函数的东西。这在 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
)
这将查找在同一列的另一个值中被空格包围的值(单词或短语),或者位于同一列的另一个值的开头或结尾。
这个特定的例子只产生一个结果:
str
----------
two things
至少可以说,该查询几乎不会非常有效,但希望可以激发您或其他人提出更好的想法。
给定模糊规格的粗略猜测:
SELECT col1, col2, col3, comments
FROM dbo.your_table
WHERE comments LIKE '% ' + col1 + ' %'
OR comments LIKE '% ' + col2 + ' %'
OR comments LIKE '% ' + col3 + ' %';
请注意,这不会令人印象深刻。