दोनों तारों को उनके भागों में विभाजित किया जाना चाहिए। एसक्यूएल-सर्वर 2008 में एक्सएमएल दृष्टिकोण के साथ किया जाना सबसे अच्छा है।
ध्यान दें :यदि आपके डेटा में निषिद्ध वर्ण शामिल हो सकते हैं जैसे <>öä@€&
और न केवल आपके उदाहरण की तरह सादे लैटिन वर्ण, आपको कुछ अतिरिक्त प्रयास की आवश्यकता होगी...
बाकी काफी आसान है:बस @String1
. के सभी भागों को लें जो @String2
. में नहीं मिलते हैं ।
समेकित परिणाम है - फिर से - एक्सएमएल के माध्यम से किया जाना सबसे अच्छा
इसे आजमाएं:
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,'')