选择email地址(SQL)



我在一个表中有一个列(列名是" from "),看起来像这样

blabla@hotmail.com
frank ocean real frankocean@mail.com
ari@gold.com
frits west f.west@mail.com

我想只选择电子邮件地址,我该怎么做?用子字符串?我可以找到一个域名,但我想要完整的邮件地址,像这样:

blabla@hotmail.com
frankocean@mail.com
ari@gold.com
f.west@mail.com

谢谢!

将字符串反转并在地址前查找空格:try this

CREATE TABLE #Addresses (EmailAddress VARCHAR(100))
INSERT INTO #Addresses (EmailAddress)
SELECT 'blabla@hotmail.com'
UNION
SELECT 'frank ocean real frankocean@mail.com'
UNION
SELECT 'ari@gold.com'
UNION
SELECT 'frits west f.west@mail.com'
SELECT LTRIM(RTRIM(RIGHT(EmailAddress, CHARINDEX(' ', REVERSE(' ' + EmailAddress),CHARINDEX('@', REVERSE(' '+emailAddress)))))) FROM #Addresses

编辑:如果您有任何包含地址后面的名称的字符串,您可以使用以下命令来删除地址:

CREATE TABLE #Addresses (EmailAddress VARCHAR(100))
INSERT INTO #Addresses (EmailAddress)
SELECT 'blabla@hotmail.com'
UNION
SELECT 'frank ocean real frankocean@mail.com'
UNION
SELECT 'ari@gold.com'
UNION
SELECT 'frits west f.west@mail.com'
UNION 
SELECT 'me@me.com my name'
SELECT LTRIM(RTRIM(LEFT(RIGHT(EmailAddress, CHARINDEX(' ', REVERSE(' ' + EmailAddress),CHARINDEX('@', REVERSE(' '+emailAddress)))), CHARINDEX(' ', EmailAddress + ' '))) FROM #Addresses

DROP TABLE #Addresses
编辑2:忘记添加修剪功能

编辑3:使用OP的列名(未发布的表名)的最终代码:

SELECT LTRIM(RTRIM(LEFT(RIGHT([From], CHARINDEX(' ', REVERSE(' ' + [From]),CHARINDEX('@', REVERSE(' '+[From])))), CHARINDEX(' ', [From]+ ' '))) FROM -- whatever your table is named

如果输出始终是您给出的格式,那么希望这将工作:

SELECT RIGHT([From], CHARINDEX(' ', REVERSE(' ' + [From])) - 1) AS [Result]
FROM   YourTable 

这只会在你想要的输入(实际的电子邮件地址)之前有一个空格时才会起作用。我将此用于类似的目的,用于处理一些遗留的可疑客户数据。

这是SQL Server,我不知道它是否会工作在任何其他RDBMS

最新更新