You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中传入用户名提取对应邮箱域名的实现方法

解决MySQL中根据用户名提取邮箱域名的需求

这个需求用MySQL自带的字符串处理函数就能轻松实现,核心思路是利用SUBSTRING_INDEX函数拆分邮箱字符串,匹配用户名并提取目标域名部分。

核心逻辑拆解

邮箱格式为用户名@域名.后缀,我们需要两步操作:

  1. 匹配目标用户:从mails字段中提取@左侧的用户名,和传入参数做匹配,筛选出对应记录。
  2. 提取域名主体:从匹配到的邮箱中,先提取@右侧的部分(比如gmail.com),再提取这部分中第一个.左侧的内容(也就是gmail)。

直接查询实现

针对你的两个测试案例,直接写SQL查询就能得到结果:

案例1:传入harishsng

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(mails, '@', -1), '.', 1) AS domain
FROM mails
WHERE SUBSTRING_INDEX(mails, '@', 1) = 'harishsng';

执行后返回gmail,符合预期。

案例2:传入harish.sn

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(mails, '@', -1), '.', 1) AS domain
FROM mails
WHERE SUBSTRING_INDEX(mails, '@', 1) = 'harish.sn';

执行后返回m-tutor,完全满足需求。

封装成存储过程(可选)

如果需要频繁调用,可以把逻辑封装成存储过程,传入用户名更便捷:

DELIMITER //
CREATE PROCEDURE GetEmailDomain(IN username VARCHAR(45))
BEGIN
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(mails, '@', -1), '.', 1) AS domain
    FROM mails
    WHERE SUBSTRING_INDEX(mails, '@', 1) = username;
END //
DELIMITER ;

调用方式:

CALL GetEmailDomain('harishsng'); -- 返回gmail
CALL GetEmailDomain('harish.sn'); -- 返回m-tutor

函数说明

这里用到的SUBSTRING_INDEX是MySQL实用的字符串拆分函数:

  • SUBSTRING_INDEX(str, delim, count):根据分隔符delim拆分字符串str,count为正数时取第count个分隔符左侧内容;为负数时取右侧内容。
    • SUBSTRING_INDEX(mails, '@', 1):提取@左侧的用户名部分
    • SUBSTRING_INDEX(mails, '@', -1):提取@右侧的域名+后缀部分
    • 嵌套调用SUBSTRING_INDEX(..., '.', 1):从域名+后缀中提取第一个.左侧的域名主体

这个方案适用于标准格式的邮箱,针对你提供的测试数据完全没问题;如果遇到异常格式的邮箱(比如无@或无.),可以额外添加判断逻辑兼容。

内容的提问来源于stack exchange,提问作者harish_sng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:44