如何从电子邮件地址中选择域名

时间:2010-04-13 08:45:48

标签: mysql

我有user1@gmail.comuser2@ymail.com user3@hotmail.com等电子邮件地址。 我想要一个Mysql SELECT来修剪用户名和.com并返回输出为 gmailymailhotmail

13 个答案:

答案 0 :(得分:58)

假设该域名是gmail.com,yahoo.com等单字域名,请使用

select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1))

内部SUBSTR@之后获取电子邮件地址的正确部分,而外部SUBSTRING_INDEX将在第一期间切断结果。

否则,如果域名应包含多个单词,如mail.yahoo.com等,请使用:

select (SUBSTR(email, INSTR(email, '@') + 1, LENGTH(email) - (INSTR(email, '@') + 1) - LENGTH(SUBSTRING_INDEX(email,'.',-1)))) 

LENGTH(email) - (INSTR(email, '@') + 1) - LENGTH(SUBSTRING_INDEX(email,'.',-1))将使用(.com, .biz etc. part)使用SUBSTRING_INDEX来获取域名的长度减去TLD {{1}},其中负数将从右到左计算。

答案 1 :(得分:43)

我更喜欢:

select right(email_address, length(email_address)-INSTR(email_address, '@')) ...

因此您无需猜测用户的电子邮件域有多少个子域。

答案 2 :(得分:9)

使用SUBSTRING_INDEX在“@”和“。”处“拆分”诀窍。请参阅http://dev.mysql.com/doc/refman/5.1/de/string-functions.html#idm47531853671216上的文档。

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1);

实施例

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX("foo@bar.buz", '@', -1), '.', 1);

会给你“吧”。

以下是发生的事情:
 *在'@'拆分“foo@bar.buz”。 - > [“foo”,“bar.buz”]  *从右边选择第一个元素(索引-1)。 - > “bar.buz”
 *将“bar.buz”拆分为“。” - > [“bar”,“buz”]
 *选择第一个元素(索引1) - > “酒吧”
结果:“bar”

如果您还需要删除子域名,请使用:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', -2), '.', 1);

实施例

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX("foo@1.2.3.bar.buz", '@', -1), '.', -2), '.', 1);

会给你“吧”。

答案 3 :(得分:9)

For PostgreSQL:

split_part(email, '@', 2) AS domain

Full query:

SELECT email, split_part(email, '@', 2) AS domain
FROM users;

Ref: http://www.postgresql.org/docs/current/static/functions-string.html

Credit to https://stackoverflow.com/a/19230892/1048433

答案 4 :(得分:5)

尝试此操作,从域中删除@并离开域名,例如:domain.com

select SUBSTR(SUBSTR(email_field, INSTR(email_field, '@'), INSTR(email_field, '.')), 2) as domain

答案 5 :(得分:2)

选择(SUBSTRING_INDEX(SUBSTR(电子邮件,INSTR(电子邮件,' @')+ 1),'。',1)from tableName)

某些sql语句需要在电子邮件列所属的位置指定表名。

答案 6 :(得分:2)

如果您想知道您拥有的电子邮件地址中最常用的域名(可能有用),您可以这样做:

select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1)) as a,count(*) as c
FROM User
group by a
order by c desc;

结果:

enter image description here

答案 7 :(得分:2)

DECLARE @Email Varchar(20)
SET @Email='abc@gmail.com'
SELECT SUBSTRING(@Email, CHARINDEX('@',@Email)+1,LEN(@Email))

答案 8 :(得分:1)

试试这个:

select SUBSTR(field_name, INSTR(field_name, '@'), INSTR(field_name, '.'))

答案 9 :(得分:1)

我的建议是(对于mysql):

SELECT 
    LOWER(email) AS email,
    SUBSTRING_INDEX(email, '@', + 1) AS account,
 REPLACE(SUBSTRING_INDEX(email, '@', -1), CONCAT('.',SUBSTRING_INDEX(email, '.', -1)),'') -- 2nd part of mail - tld.
  AS domain,
    CONCAT('.',SUBSTRING_INDEX(email, '.', -1)) AS tld
FROM
...
ORDER BY domain, email ASC;

答案 10 :(得分:1)

DECLARE @Email Varchar(20)
SET @Email='abc@gmail.com'
SELECT RIGHT(@Email,LEN(@Email)-CHARINDEX('@',@Email))

答案 11 :(得分:0)

从task24中选择SUBSTR(电子邮件,instr(电子邮件,'@')+1,instr(电子邮件,'。')-3);

确切的答案正在使用此查询

答案 12 :(得分:-1)

SELECT SUBSTR(NAME,INSTR(NAME,'@')+1) FROM ORACLE;

Oracle是我的桌子。不要混淆。