我有一个电子邮件地址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 .
小智 47
我更喜欢:
select right(email_address, length(email_address)-INSTR(email_address, '@')) ...
Run Code Online (Sandbox Code Playgroud)
所以你不必猜测你的用户的电子邮件域有多少个子域.
使用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)
会给你"酒吧".
对于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
试试这个,从域中删除@并离开域名,例如:domain.com
select SUBSTR(SUBSTR(email_field, INSTR(email_field, '@'), INSTR(email_field, '.')), 2) as domain
如果您想从您拥有的电子邮件地址中了解最常用的域名(可能很有用),您可以执行以下操作:
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)
结果 :