如何在Oracle SQL Developer中实现邮箱地址的部分掩码处理
Oracle邮箱地址前缀掩码解决方案
方法一:使用正则表达式(REGEXP_REPLACE)
通过正则匹配邮箱前缀的首尾字符,结合RPAD生成对应数量的星号替换中间部分,同时处理短前缀的边界情况:
SELECT name, emailAddress, CASE -- 前缀长度≤2时直接保留原邮箱 WHEN INSTR(emailAddress, '@') - 1 <= 2 THEN emailAddress ELSE REGEXP_REPLACE( emailAddress, '^(.)[^@]+(.)(@.*)$', -- 捕获前缀首字符、尾字符及@后缀 '\1' || RPAD('*', INSTR(emailAddress, '@') - 3, '*') || '\2\3' ) END AS emailMask FROM myEmailTable;
方法二:字符串拼接(无正则)
通过SUBSTR和INSTR拆分邮箱各部分,手动拼接首字符、星号、尾字符和后缀:
SELECT name, emailAddress, CASE -- 前缀长度≤2时直接保留原邮箱 WHEN INSTR(emailAddress, '@') - 1 <= 2 THEN emailAddress ELSE SUBSTR(emailAddress, 1, 1) || -- 取前缀首字符 RPAD('*', INSTR(emailAddress, '@') - 3, '*') || -- 生成对应数量星号 SUBSTR(emailAddress, INSTR(emailAddress, '@') - 1, 1) || -- 取前缀尾字符 SUBSTR(emailAddress, INSTR(emailAddress, '@')) -- 拼接@及后缀 END AS emailMask FROM myEmailTable;
示例效果
| name | emailAddress | emailMask |
|---|---|---|
| Bon Jovi | BonJovi@gmail.com | B*****i@gmail.com |
| Dan Brown | Dbrown@gmail.com | D****n@gmail.com |
| Alice | a@gmail.com | a@gmail.com |
| Bob | bob@outlook.com | b**b@outlook.com |
| Eve | ev@yahoo.com | ev@yahoo.com |
内容的提问来源于stack exchange,提问作者Roundup
相关产品推荐
相关产品推荐

