如何对报表中ACC_NUM与NAME列实现指定规则的数据掩码?
账号与姓名数据掩码实现方案
需求回顾
- ACC_NUM列:仅保留最后3位,其余替换为
xxxxxxx - NAME列:每个单词保留前3位,剩余部分替换为
XXXXX;单词长度不足3位时,保留原单词
完整SQL实现
SELECT CONCAT('xxxxxxx', RIGHT(ACC_NUM, 3)) AS MASK_ACC, REGEXP_REPLACE(NAME, '([A-Za-z]{3})([A-Za-z]+)', '\1XXXXX') AS MASK_NAME FROM your_table_name;
逻辑说明
- ACC_NUM掩码:已通过
CONCAT('xxxxxxx', RIGHT(ACC_NUM, 3))实现,截取账号最后3位并拼接固定前缀xxxxxxx。 - NAME掩码:使用
REGEXP_REPLACE正则替换函数:- 正则表达式
([A-Za-z]{3})([A-Za-z]+):匹配每个单词的前3个字母(第一个捕获组),以及后续的所有字母(第二个捕获组) - 替换规则
\1XXXXX:保留前3个字母,将后续部分替换为XXXXX - 对于长度≤3的单词(如示例中的
IS),正则无法匹配到后续字符,因此直接保留原单词,符合预期输出。
- 正则表达式
验证结果
执行上述SQL后,输出与预期一致:
| MASK_ACC | MASK_NAME |
|---|---|
| xxxxxxx111 | THIXXXXX |
| xxxxxxx522 | EVAXXXXX DIMXXXXX |
| xxxxxxx631 | THIXXXXX IS MYNXXXXX |
| xxxxxxx851 | RAUXXXXX HOLXXXXX |
| xxxxxxx999 | RAUXXXXX HOLXXXXX AGUXXXXX |
内容的提问来源于stack exchange,提问作者H. D. U.
相关产品推荐
相关产品推荐

