我有像user1@gmail.com,user2@ymail.com user3@hotmail.com这样的电子邮件地址。等。我想要一个Mysql的SELECT,将削减用户名和.com,并返回输出为gmail,ymail,hotmail等。
发布于 2010-04-13 17:18:51
假设该域是像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))将通过使用带有负数的SUBSTRING_INDEX获得域的长度减去TLD (.com, .biz etc. part),这将从右到左计算。
发布于 2013-11-11 13:31:31
我更喜欢:
select right(email_address, length(email_address)-INSTR(email_address, '@')) ...因此,您不必猜测您的用户的电子邮件域有多少子域。
发布于 2016-04-22 05:54:29
对于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
https://stackoverflow.com/questions/2628138
复制相似问题