我有一个小问题,我知道一些解决方案,但我不知道最好的方法(或更少脏的意大利面方式)。
我有一个字符串变量,我需要在类似的表达式中使用它。
所以:
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'
答案 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