我有user1@gmail.com
,user2@ymail.com user3@hotmail.com
等电子邮件地址。
我想要一个Mysql SELECT
来修剪用户名和.com并返回输出为
gmail
,ymail
,hotmail
等
答案 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
答案 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;
结果:
答案 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是我的桌子。不要混淆。