4

我有一个小问题,我知道一些解决方案,但我不知道最好的方法(或不那么脏的意大利面方法)。

我有一个字符串变量,我需要在类似的表达式中使用它。

所以:

declare @a varchar(100) = 'my string to use as a join from'

select *
from table
where
    column like '%' + @a + '%'

但我不想要包含@a 变量的表中的任何行,我想要包含在@a 变量中的表中的任何行,所以:

select *
from table
where
    @a like '%' + column + '%'

结果:

'my string'
'as a join from'

但现在我需要从 @a 变量中删除匹配的行。我怎样才能做到这一点?

(编辑)

预期结果:

@a = ' to use '

'my string'
'as a join from'
4

1 回答 1

5

您可以更改@a选择中每个匹配行的值:

select @a = replace(@a, MyColumn, '')
  from MyTable
 where @a like '%' + MyColumn + '%'

演示:http ://www.sqlfiddle.com/#!3/187d6/5 (结果@a = ' to use ':)


如果您还想获取结果集,请使用临时表来存储匹配的行:

select MyColumn
  into #Temp
  from MyTable
 where @a like '%' + MyColumn + '%'

-- @a = ' to use '
select @a = replace(@a, MyColumn, '') from #Temp

-- returns result set of words that matched
select * from #Temp

drop table #Temp

演示:http ://www.sqlfiddle.com/#!3/187d6/13

于 2012-06-01T22:04:43.903 回答