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
如果您使用的是 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
我正在使用 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
如果您使用的是 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