sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar skillnaden mellan två strängar i SQL

Båda strängarna måste delas i sina delar. I SQL-Server 2008 är detta bäst att göra med en XML-ansats.

uppmärksamhet :Om din data kan innehålla förbjudna tecken som <>öä@€& och inte bara vanliga latinska tecken som i ditt exempel, du skulle behöva lite extra ansträngning...

Resten är ganska enkelt:Ta bara alla delar av @String1 som inte finns i @String2 .

Det sammanlänkade resultatet är – återigen – bäst att göra via XML

Prova detta:

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. Ta bort rader för att ha maximalt x rader per grupp i Oracle-tabellen

  2. MySQL Match Fulltext

  3. Hur bygger jag en fråga i Ruby on Rails som bara går med på max av en has_many-relation och inkluderar ett urvalsfilter på den relationen?

  4. Mysql datetime index fungerar inte när du använder "gilla"