I am using Microsoft SQL Server 2016.
I have two strings containing email addresses called @Recipients
and @Copy_Recipients
.
I need to cut out
those emails from @Copy_Recipients
that exists in @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;';
I know I am not bringing any idea of how to fix this. That's why I am writing. To ask what methods or functions could I use to achieve my goal. Thank you.
If you're on SQL Server 2017 or later, you can use 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
If you're on earlier versions of SQL Server, you'll have to use workarounds for the functions used above.
If you're on 2016, you can do it slightly differently:
DECLARE @Result NVARCHAR(MAX) = @Copy_Recipients
SELECT @Result = REPLACE(@Result, value, '') FROM STRING_SPLIT(@Recipients, ';')
And the final result with semicolons trimmed:
SELECT SUBSTRING(@Result, PATINDEX('%[^;]%', @Result), LEN(@Result)) AS FinalResult