Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como encontrar diferenças entre duas strings no SQL


Ambas as strings devem ser divididas em suas partes. No SQL-Server 2008, é melhor fazer isso com uma abordagem XML.

atenção :se seus dados podem incluir caracteres proibidos como <>öä@€& e não apenas caracteres latinos simples como no seu exemplo, você precisaria de um esforço extra ...

O resto é bem fácil:basta pegar todas as partes de @String1 que não são encontrados em @String2 .

O resultado concatenado é - novamente - melhor ser feito via XML

Tente isto:
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,'')