sql - 如果字符串是电子邮件格式,我如何从列中提取?
问题描述
我想提取特定列中包含的不同电子邮件。该列可能有其他类型的字符串,这些字符串可能不是我想要排除的电子邮件,而我只想要电子邮件。
Table 1
ID Value
1 Sent Email successfully to John.Muller@gmail.com, Jim.James@gmail.com, Bob.King@hotmail.com and it will be sent tomorrow
2 Email not successful to adam.sandy@yahoo.com, Trisha.stratus@gmail.com, lindy.123@gmail.com and it will not be sent today
如果我们看到这种格式,我每个 ID 上都有 3 封不同的电子邮件,我想知道是否有任何方法可以获取这种格式的数据。
Expected output
ID Value
1 John.Muller@gmail.com, Jim.James@gmail.com, Bob.King@hotmail.com
2 adam.sandy@yahoo.com, Trisha.stratus@gmail.com, lindy.123@gmail.com
如果这种类型的输出也是可能的,那就太好了。
Another Possible Output (this would be awesome if possible)
ID Value
1 John.Muller@gmail.com
1 Jim.James@gmail.com
1 Bob.King@hotmail.com
2 adam.sandy@yahoo.com
2 Trisha.stratus@gmail.com
2 lindy.123@gmail.com
解决方案
这是一个内联方法
例子
Select A.ID
,Value = B.RetVal
From YourTable A
Cross Apply (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = v.value('(./text())[1]', 'varchar(150)')
From (values (convert(xml,'<x>' + replace(replace(Value,' ',','),',','</x><x>')+'</x>'))) x(n)
Cross Apply n.nodes('x') node(v)
) B
Where RetVal like '%@%.___'
退货
ID Value
1 John.Muller@gmail.com
1 Jim.James@gmail.com
1 Bob.King@hotmail.com
2 adam.sandy@yahoo.com
2 Trisha.stratus@gmail.com
2 lindy.123@gmail.com
编辑作为一行返回
Select A.ID
,B.Value
From YourTable A
Cross Apply (
Select Value = Stuff((Select ', ' +RetVal
From (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = v.value('(./text())[1]', 'varchar(150)')
From (values (convert(xml,'<x>' + replace(replace(Value,' ',','),',','</x><x>')+'</x>'))) x(n)
Cross Apply n.nodes('x') node(v)
) B1
Where RetVal like '%@%.___'
Order by RetSeq
For XML Path ('')),1,2,'')
) B
退货
ID Value
1 John.Muller@gmail.com, Jim.James@gmail.com, Bob.King@hotmail.com
2 adam.sandy@yahoo.com, Trisha.stratus@gmail.com, lindy.123@gmail.com
推荐阅读
- c - MS dos 6.22 是否支持 dll 库链接?
- angular5 - 如果分页不是基于零的,如何实现 Ngx-Datatable 服务器端分页
- matlab - 如何找到方程拟合参数的统计量
- android - 点击时 EditText 焦点跳转到其他 EditText
- java - Selenium - 使用相同的凭据打开两个相同的网站
- javascript - 未捕获的 SyntaxError:javascript 中的无效或意外令牌 - Web 共享 api
- kotlin - 为什么 Kotlin 嵌套列表有这种行为
- docker - 使用`environment`键时未在容器中设置环境变量
- rust - 在 Cargo 项目中使用 crate 时出现“可能缺少 extern crate”的错误
- android - 如果用户点击列表项,这是否可能,那么它应该定向到包含多个 TextView 的卡片视图的单独布局