如何从SQL Server中的单个行中提取多个字符串

前端之家收集整理的这篇文章主要介绍了如何从SQL Server中的单个行中提取多个字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有例如下表数据:
id    |    text
--------------------------------------------------------------------------------
1     |  Peter (Peter@peter.de) and Marta (marty@gmail.com) are doing fine.
2     |  Nothing special here
3     |  Another email address (me@my.com)

现在我需要一个select来返回我的文本列中的所有电子邮件地址(可以只检查括号),如果text列中有多个地址,则返回多行.我知道how to extract the first element,但我完全不知道如何找到第二个和更多的结果.

解决方法

您可以递归使用cte去除字符串.
declare @T table (id int,[text] nvarchar(max))

insert into @T values (1,'Peter (Peter@peter.de) and Marta (marty@gmail.com) are doing fine.')
insert into @T values (2,'Nothing special here')
insert into @T values (3,'Another email address (me@my.com)')

;with cte([text],email)
as
(
    select
        right([text],len([text]) - charindex(')',[text],0)),substring([text],charindex('(',0) + 1,charindex(')',0) - charindex('(',0) - 1) 
    from @T
    where charindex('(',0) > 0
    union all
    select
        right([text],0) - 1) 
    from cte
    where charindex('(',0) > 0
)
select email
from cte

结果

email
Peter@peter.de
me@my.com
marty@gmail.com

猜你在找的MsSQL相关文章