sql >> Databáze >  >> RDS >> Sqlserver

Jak najít rozdíl mezi dvěma řetězci v SQL

Oba řetězce musí být rozděleny na své části. V SQL-Server 2008 je nejlepší to provést pomocí přístupu XML.

pozornost :Pokud vaše data mohou obsahovat zakázané znaky jako <>öä@€& a ne jen obyčejné latinské znaky jako ve vašem příkladu, budete potřebovat další úsilí...

Zbytek je poměrně snadný:Stačí vzít všechny části @String1 které se nenacházejí v @String2 .

Zřetězený výsledek je – opět – nejlepší provést pomocí XML

Zkuste toto:

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. Mám odstranit výchozí pole id při použití řetězcového primárního klíče v Rails / Postgres?

  2. Server vs zdroj dat v připojovacím řetězci

  3. Podívejte se, co sp_execute dělá

  4. Vlevo připojit tabulku a echo v tabulce