我在表格中有列(列名是“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
谢谢!
答案 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。