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

如何在SQL Server中从邮箱ID列提取域名主体(不含顶级域名后缀)

没问题!我帮你整理了几种在SQL Server中提取邮箱域名主体的实用方法,你可以根据自己的SQL Server版本和实际需求来选择:

方法1:基础字符串函数组合(兼容所有SQL Server版本)

这是最通用的方案,适合所有版本的SQL Server,通过CHARINDEX定位@和.的位置,再用SUBSTRING截取中间的主体部分:

SELECT 
    Email,
    SUBSTRING(
        Email,
        CHARINDEX('@', Email) + 1,
        CHARINDEX('.', Email, CHARINDEX('@', Email)) - CHARINDEX('@', Email) - 1
    ) AS DomainBody
FROM YourTableName;

逻辑解释:

  • CHARINDEX('@', Email)找到@的位置,加1就是域名部分的起始位置
  • CHARINDEX('.', Email, CHARINDEX('@', Email))从@的位置开始往后找第一个.的位置
  • 用这个.的位置减去@的位置再减1,就是我们需要截取的域名主体长度

如果遇到格式不规范的邮箱(比如缺少@或.),可以加个CASE语句处理异常:

SELECT 
    Email,
    CASE 
        WHEN Email LIKE '%@%.%' THEN SUBSTRING(Email, CHARINDEX('@', Email)+1, CHARINDEX('.', Email, CHARINDEX('@', Email)) - CHARINDEX('@', Email)-1)
        ELSE '无效邮箱格式'
    END AS DomainBody
FROM YourTableName;
方法2:使用PARSENAME函数(代码更简洁,适合二级域名场景)

PARSENAME原本是用来拆分SQL对象名的,它会按.分隔字符串并从右往左取部分。我们可以先把@替换成.,再取第2部分:

SELECT 
    Email,
    PARSENAME(REPLACE(Email, '@', '.'), 2) AS DomainBody
FROM YourTableName;

逻辑解释:

比如apple@hp-dell.com替换后变成apple.hp-dell.com,PARSENAME(...,2)会从右往左数第2段,也就是hp-dell,正好符合你的需求。

注意:如果域名是多级结构(比如user@sub.domain.co.uk),这个方法会返回sub.domain,如果你只需要最靠近.的主体部分,这个方法就不适用了。

方法3:使用STRING_SPLIT(SQL Server 2016+版本适用)

如果你的SQL Server版本在2016及以上,支持STRING_SPLIT函数,可以用它分步拆分字符串,处理更复杂的域名结构:

SELECT 
    t.Email,
    s2.value AS DomainBody
FROM YourTableName t
-- 先按@拆分,取@后面的域名部分
CROSS APPLY (SELECT TOP 1 value FROM STRING_SPLIT(t.Email, '@') ORDER BY CHARINDEX('@', t.Email) DESC) s1
-- 再按.拆分,取第一个.前面的主体部分
CROSS APPLY (SELECT TOP 1 value FROM STRING_SPLIT(s1.value, '.') ORDER BY CHARINDEX('.', s1.value) ASC) s2;

这个方法灵活性更高,哪怕是多级域名也能准确提取第一个.前面的主体部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:24:05