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

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

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

解决方法

您可以递归使用cte去除字符串.
  1. declare @T table (id int,[text] nvarchar(max))
  2.  
  3. insert into @T values (1,'Peter (Peter@peter.de) and Marta (marty@gmail.com) are doing fine.')
  4. insert into @T values (2,'Nothing special here')
  5. insert into @T values (3,'Another email address (me@my.com)')
  6.  
  7. ;with cte([text],email)
  8. as
  9. (
  10. select
  11. right([text],len([text]) - charindex(')',[text],0)),substring([text],charindex('(',0) + 1,charindex(')',0) - charindex('(',0) - 1)
  12. from @T
  13. where charindex('(',0) > 0
  14. union all
  15. select
  16. right([text],0) - 1)
  17. from cte
  18. where charindex('(',0) > 0
  19. )
  20. select email
  21. from cte

结果

  1. email
  2. Peter@peter.de
  3. me@my.com
  4. marty@gmail.com

猜你在找的MsSQL相关文章