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

Uge*_*ali 37 mysql

我有一个电子邮件地址user1@gmail.com,user2@ymail.com user3@hotmail.com...等等.我想一个MySQL SELECT,将修剪的用户名和.com和返回输出 gmail,ymail,hotmail,等.

ano*_*ous 60

假设该域名是单个域名域,如gmail.com,yahoo.com,请使用

select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1))
Run Code Online (Sandbox Code Playgroud)

内部SUBSTR获取电子邮件地址的正确部分,@外部SUBSTRING_INDEX将在第一个时间段中截断结果.

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

select (SUBSTR(email, INSTR(email, '@') + 1, LENGTH(email) - (INSTR(email, '@') + 1) - LENGTH(SUBSTRING_INDEX(email,'.',-1)))) 
Run Code Online (Sandbox Code Playgroud)

LENGTH(email) - (INSTR(email, '@') + 1) - LENGTH(SUBSTRING_INDEX(email,'.',-1))(.com, .biz etc. part)通过使用SUBSTRING_INDEX从右到左计算的负数来获得域的长度减去TLD .

  • 这部分将返回'@'后的所有字符:``SUBSTR(电子邮件,INSTR(电子邮件,'@')+ 1)`` (21认同)

小智 47

我更喜欢:

select right(email_address, length(email_address)-INSTR(email_address, '@')) ...
Run Code Online (Sandbox Code Playgroud)

所以你不必猜测你的用户的电子邮件域有多少个子域.

  • 适用于IPv4,IPv6,本地名称和punycode. (3认同)

knu*_*gie 9

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

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1);
Run Code Online (Sandbox Code Playgroud)

例:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX("foo@bar.buz", '@', -1), '.', 1);
Run Code Online (Sandbox Code Playgroud)

会给你"酒吧".

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

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

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', -2), '.', 1);
Run Code Online (Sandbox Code Playgroud)

例:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX("foo@1.2.3.bar.buz", '@', -1), '.', -2), '.', 1);
Run Code Online (Sandbox Code Playgroud)

会给你"酒吧".


rat*_*ray 8

对于PostgreSQL:

split_part(email, '@', 2) AS domain
Run Code Online (Sandbox Code Playgroud)

完整查询:

SELECT email, split_part(email, '@', 2) AS domain
FROM users;
Run Code Online (Sandbox Code Playgroud)

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

感谢/sf/answers/1346162471/


Joe*_* L. 5

试试这个,从域中删除@并离开域名,例如:domain.com

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


Jul*_*ien 5

如果您想从您拥有的电子邮件地址中了解最常用的域名(可能很有用),您可以执行以下操作:

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

结果 :

在此处输入图片说明