sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan finder du forskellen mellem to strenge i SQL

Begge strenge skal opdeles i deres dele. I SQL-Server 2008 er dette bedst at gøre med en XML-tilgang.

opmærksomhed :Hvis dine data kan indeholde forbudte tegn som <>öä@€& og ikke bare almindelige latinske tegn som i dit eksempel, du ville have brug for en ekstra indsats...

Resten er ret nemt:Bare tag alle dele af @String1 som ikke findes i @String2 .

Det sammenkædede resultat er - igen - bedst at gøre via XML

Prøv dette:

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. Hvordan kan jeg bruge DATE() i Doctrine 2 DQL?

  2. Sådan konverterer du rækker til kolonne i Oracle-tabellen

  3. hvordan samler man værdier fra en pivot?

  4. Min SQL Dynamic-forespørgsel udføres og få output til en variabel i lagret procedure