4

私は小さな問題を抱えており、その解決策をいくつか知っていますが、最善の方法 (または汚れの少ないスパゲッティの方法) を知りません。

文字列変数があり、それを like 式で使用する必要があります。

そう:

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

@aselect で一致した各行の値を変更できます。

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 に答える