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

在SQL Server中实现Email Address列的邮箱掩码显示方案

SQL Server 邮箱地址掩码实现方法

根据你的需求,需要保留邮箱@前部分的首尾字符,中间用*填充,@后部分保持不变。以下是用STUFF和REPLACE函数的具体实现方案:

一、使用STUFF函数实现

STUFF函数可对字符串指定位置的内容进行替换,核心思路是先拆分邮箱的前缀(@之前的部分),对前缀做掩码处理后再拼接后缀(@及之后的部分)。

完整SQL语句

SELECT 
    [Email Address],
    CASE 
        -- 处理前缀过短的情况(@前字符数≤1时不掩码)
        WHEN CHARINDEX('@', [Email Address]) <= 2 THEN [Email Address]
        ELSE
            -- 对前缀掩码:保留首尾字符,中间替换为*
            STUFF(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1), 
                  2, 
                  LEN(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1)) - 2, 
                  REPLICATE('*', LEN(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1)) - 2))
            -- 拼接@及后续部分
            + SUBSTRING([Email Address], CHARINDEX('@', [Email Address]), LEN([Email Address]))
    END AS MaskedEmail
FROM YourTableName;

逻辑说明

  1. CHARINDEX('@', [Email Address]):获取@符号在邮箱字符串中的位置。
  2. LEFT([Email Address], CHARINDEX('@', ...)-1):提取@之前的前缀内容。
  3. STUFF(前缀, 2, 前缀长度-2, REPLICATE('*', 前缀长度-2)):从前缀第2个字符开始,替换掉中间前缀长度-2个字符为对应数量的*,保留首尾字符。
  4. SUBSTRING([Email Address], CHARINDEX('@', ...), LEN(...)):提取@及之后的后缀部分,直接拼接即可。

二、使用REPLACE函数实现

REPLACE函数通过替换前缀的中间部分为*实现掩码,同样需要先拆分前缀和后缀。

完整SQL语句

SELECT 
    [Email Address],
    CASE 
        WHEN CHARINDEX('@', [Email Address]) <= 2 THEN [Email Address]
        ELSE
            -- 替换前缀的中间部分为*
            REPLACE(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1),
                    SUBSTRING(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1), 2, LEN(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1)) - 2),
                    REPLICATE('*', LEN(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1)) - 2))
            + SUBSTRING([Email Address], CHARINDEX('@', [Email Address]), LEN([Email Address]))
    END AS MaskedEmail
FROM YourTableName;

逻辑说明

  1. SUBSTRING(前缀, 2, 前缀长度-2):提取前缀中需要替换的中间部分(去掉首尾字符)。
  2. REPLACE(前缀, 中间部分, REPLICATE('*', 前缀长度-2)):将前缀的中间部分替换为对应数量的*,得到掩码后的前缀。
  3. 最后拼接@及后缀部分,完成整个邮箱的掩码。

三、简化写法(无需区分函数)

如果不需要严格指定用STUFF或REPLACE,可以用更直观的拼接方式实现:

SELECT 
    [Email Address],
    CASE 
        WHEN CHARINDEX('@', [Email Address]) <= 2 THEN [Email Address]
        ELSE
            LEFT([Email Address], 1) -- 保留前缀第一个字符
            + REPLICATE('*', LEN(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1)) - 2) -- 生成对应数量的*
            + RIGHT(LEFT([Email Address], CHARINDEX('@', [Email Address]) - 1), 1) -- 保留前缀最后一个字符
            + SUBSTRING([Email Address], CHARINDEX('@', [Email Address]), LEN([Email Address])) -- 拼接后缀
    END AS MaskedEmail
FROM YourTableName;

测试结果

针对你的示例数据:

  • aaron0@adventure-works.com → a****0@adventure-works.com
  • aaron1@adventure-works.com → a****1@adventure-works.com
  • aaron14@adventure-works.com → a*****4@adventure-works.com

以上语句均可得到符合要求的掩码结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:05:31