両方の文字列をそれぞれの部分に分割する必要があります。 SQL-Server 2008 では、これは XML アプローチで行うのが最適です。
注意 :データに <>öä@€&
などの禁止文字が含まれている可能性がある場合 あなたの例のような単純なラテン文字だけでなく、追加の努力が必要になるでしょう...
残りはかなり簡単です:@String1
のすべての部分を取るだけです @String2
にはありません .
連結された結果は - 繰り返しますが、XML 経由で行うのが最善です
これを試してください:
Declare @String1 as varchar(100)='a,b,c,d,e';
Declare @String2 as varchar(100)='b,e';
WITH FirstStringSplit(S1) AS
(
SELECT CAST('<x>' + REPLACE(@String1,',','</x><x>') + '</x>' AS XML)
)
,SecondStringSplit(S2) AS
(
SELECT CAST('<x>' + REPLACE(@String2,',','</x><x>') + '</x>' AS XML)
)
SELECT STUFF(
(
SELECT ',' + part1.value('.','nvarchar(max)')
FROM FirstStringSplit
CROSS APPLY S1.nodes('/x') AS A(part1)
WHERE part1.value('.','nvarchar(max)') NOT IN(SELECT B.part2.value('.','nvarchar(max)')
FROM SecondStringSplit
CROSS APPLY S2.nodes('/x') AS B(part2)
)
FOR XML PATH('')
),1,1,'')