sql >> Database >  >> RDS >> Sqlserver

Hoe diff tussen twee strings in SQL te vinden

Beide snaren moeten in hun delen worden gesplitst. In SQL-Server 2008 kan dit het beste worden gedaan met een XML-aanpak.

aandacht :Als uw gegevens mogelijk verboden tekens bevatten, zoals <>öä@€& en niet alleen gewone Latijnse karakters zoals in je voorbeeld, je zou wat extra inspanning nodig hebben...

De rest is vrij eenvoudig:neem gewoon alle delen van @String1 die niet worden gevonden in @String2 .

Het aaneengeschakelde resultaat kan - nogmaals - het beste via XML worden gedaan

Probeer dit:

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. Hoe Oracle-gegevensbron toe te voegen in jboss 6.2

  2. Is het nodig om DbCommand na gebruik weg te gooien?

  3. Dynamische formuliergegevens opslaan in DBMS, op zoek naar de optimale aanpak

  4. Unieke identifier (guid) als primaire sleutel in databaseontwerp