我有例如下表数据:
- 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
结果
- Peter@peter.de
- me@my.com
- marty@gmail.com