Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć różnicę między dwoma ciągami w SQL?

Obie struny muszą być podzielone na części. W SQL-Server 2008 najlepiej jest to zrobić za pomocą podejścia XML.

uwaga :Jeśli Twoje dane mogą zawierać zabronione znaki, takie jak <>öä@€& i nie tylko zwykłe znaki łacińskie, jak w twoim przykładzie, potrzebujesz dodatkowego wysiłku...

Reszta jest dość prosta:po prostu weź wszystkie części @String1 których nie ma w @String2 .

Połączony wynik jest - ponownie - najlepiej wykonać za pomocą XML

Spróbuj tego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET 4:Jak skonfigurować plik EDMX w innym asemblerze w Web.Config

  2. Dołączanie pliku MDF bez pliku LDF

  3. Dlaczego otrzymuję błąd, że typ danych XML nie jest obsługiwany w zapytaniach rozproszonych podczas wysyłania zapytań do serwera połączonego o dane inne niż XML?

  4. Use Case Statement w Join

  5. Uciekanie znaków specjalnych w instrukcji SQL LIKE przy użyciu parametrów sql