SQL 删除一个字符串中存在于另一个字符串中的句子

SQL Delete sentence in one string that exists in another

我正在使用 Microsoft SQL Server 2016。

我有两个字符串,其中包含名为 @Recipients@Copy_Recipients 的电子邮件地址。

我需要 cut out 来自 @Copy_Recipients 且存在于 @Recipients 中的那些电子邮件。

@Recipients = 'john_snow@com.eu;daenerys_stormborn@com.eu;tonny_hawk@com.eu';

@Copy_Recipients = 'john_snow@com.eu;daenerys_stormborn@com.eu;tommy_leejones@com.eu;johny_cash@com.eu;';

@Wanted_Result = 'tommy_leejones@com.eu;johny_cash@com.eu;';

我知道我不会就如何解决这个问题提出任何想法。这就是我写作的原因。询问我可以使用哪些方法或功能来实现我的目标。谢谢。

如果您使用的是 SQL Server 2017 或更高版本,您可以使用 STRING_SPLIT and STRING_AGG

SELECT STRING_AGG(copy.value, ';')
  FROM STRING_SPLIT(@Copy_Recipients, ';') copy
  LEFT OUTER
  JOIN STRING_SPLIT(@Recipients, ';') recipients
    ON recipients.value = copy.value
 WHERE recipients.value IS NULL

Working demo on dbfiddle

如果您使用的是 SQL 服务器的早期版本,则必须使用上述功能的变通方法。

如果你是 2016 年,你可以稍微改变一下:

DECLARE @Result NVARCHAR(MAX) = @Copy_Recipients

SELECT @Result = REPLACE(@Result, value, '') FROM STRING_SPLIT(@Recipients, ';')

最后的分号被删掉的结果是:

SELECT SUBSTRING(@Result, PATINDEX('%[^;]%', @Result), LEN(@Result)) AS FinalResult