仅选择电子邮件地址(SQL)

时间:2014-07-03 14:23:55

标签: 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

谢谢!

2 个答案:

答案 0 :(得分:1)

反转字符串并在地址前寻找一个空格:试试这个

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

答案 1 :(得分:0)

如果输出始终采用您提供的格式,那么希望这可行:

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

只有在输入之前有空格(实际的电子邮件地址)时才会有效。对于一些传统的狡猾客户数据,我将其用于类似目的。

这是针对SQL Server的,我不知道它是否适用于任何其他RDBMS。