根据匹配的行从变量中删除字符串

时间:2012-06-01 22:00:11

标签: tsql

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

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

所以:

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'

1 个答案:

答案 0 :(得分:5)

您可以使用select:

中的每个匹配行更改@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