如何从电子邮件地址select域名
我有一个电子邮件地址,如user1@gmail.com和user2@ymail.com user3@hotmail.com …等我想要一个Mysql的select查询,以便它将修剪用户名和.com一个返回输出为gmail,ymail, hotmail等
假设该域名是像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))
将获得域名长度减去TLD (.com, .biz etc. part)
通过使用SUBSTRING_INDEX
与负计数从右到左计算。
我更喜欢:
select right(email_address, length(email_address)-INSTR(email_address, '@')) ...
所以您不必猜测用户的电子邮件域有多less个子域。
使用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”]
*select第一个元素(索引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);
会给你“吧”。
试试这个,从域中删除@并离开域,例如:domain.com
selectSUBSTR(SUBSTR(email_field,INSTR(email_field,'@'),INSTR(email_field,'。')),2)作为域
对于PostgreSQL:
split_part(email, '@', 2) AS domain
完整查询:
SELECT email, split_part(email, '@', 2) AS domain FROM users;
参考: http : //www.postgresql.org/docs/current/static/functions-string.html
从tableName中select(SUBSTRING_INDEX(SUBSTR(email,INSTR(email,'@')+ 1),'。',1)
一些sql语句需要指定邮件列所属的表名。
尝试这个:
select SUBSTR(field_name, INSTR(field_name, '@'), INSTR(field_name, '.'))
我的build议是(对于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;
如果您想知道您使用的电子邮件地址中最常用的域名(可以是有用的),则可以执行以下操作:
select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1)) as a,count(*) as c FROM User group by a order by c desc;
结果:
DECLARE @Email Varchar(20) SET @Email='abc@gmail.com' SELECT SUBSTRING(@Email, CHARINDEX('@',@Email)+1,LEN(@Email))
DECLARE @Email Varchar(20) SET @Email='abc@gmail.com' SELECT RIGHT(@Email,LEN(@Email)-CHARINDEX('@',@Email))