我有一个小问题,我知道一些解决方案,但我不知道最好的方式(或不那么脏的意大利面方式)去.
我有一个字符串变量,我需要在类似的表达式中使用它.
所以:
declare @a varchar(100) = 'my string to use as a join from'
select *
from table
where
column like '%' + @a + '%'
Run Code Online (Sandbox Code Playgroud)
但是我不想要包含@a变量的表中的任何行,我希望表中包含@a变量的所有行,所以:
select *
from table
where
@a like '%' + column + '%'
Run Code Online (Sandbox Code Playgroud)
结果:
'my string'
'as a join from'
Run Code Online (Sandbox Code Playgroud)
但是现在我需要从@a变量中删除匹配的行.我怎样才能做到这一点?
(编辑)
预期结果:
@a = ' to use '
'my string'
'as a join from'
Run Code Online (Sandbox Code Playgroud)
您可以更改@aselect中每个匹配行的值:
select @a = replace(@a, MyColumn, '')
from MyTable
where @a like '%' + MyColumn + '%'
Run Code Online (Sandbox Code Playgroud)
演示: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
Run Code Online (Sandbox Code Playgroud)
演示:http://www.sqlfiddle.com/#!3/ 187d6/13