Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल में दो स्ट्रिंग के बीच अंतर कैसे खोजें

दोनों तारों को उनके भागों में विभाजित किया जाना चाहिए। एसक्यूएल-सर्वर 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,'')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2019 नई सुविधाएँ

  2. नए कॉलम में सबस्ट्रिंग डालें

  3. डेटाबेस बाधाएं क्या हैं?

  4. स्कीमा को नहीं छोड़ा जा सकता, क्योंकि यह मौजूद नहीं है या आपके पास अनुमति नहीं है। - SQL सर्वर / TSQL ट्यूटोरियल भाग 29

  5. HH:MM:SS प्रारूप में DatedIFF