sql >> データベース >  >> RDS >> Sqlserver

SQLで2つの文字列の差分を見つける方法

    両方の文字列をそれぞれの部分に分割する必要があります。 SQL-Server 2008 では、これは XML アプローチで行うのが最適です。

    注意 :データに <>öä@€& などの禁止文字が含まれている可能性がある場合 あなたの例のような単純なラテン文字だけでなく、追加の努力が必要になるでしょう...

    残りはかなり簡単です:@String1 のすべての部分を取るだけです @String2 にはありません .

    連結された結果は - 繰り返しますが、XML 経由で行うのが最善です

    これを試してください:

    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. OdbcConnectionは漢字を?として返します

    2. JavaのSQL文字列の一重引用符の無効な文字

    3. ZendFramework1.5でINSERT...ON DUPLICATE KEY UPDATEを実行する方法はありますか?

    4. PostgreSQLクエリでラージオブジェクトのサイズを取得しますか?