MASK_INNER 函数
简介
MASK_INNER 函数用于对字符串的内部字符进行掩码处理,保留字符串左端和右端指定数量的字符不变,将中间部分替换为指定的掩码字符。该函数常用于数据脱敏场景,例如隐藏手机号码、身份证号、信用卡号等敏感信息的中间部分。
语法
mask_inner(str, left_margin, right_margin [, mask_char])
参数说明
str: STRING 类型,需要进行掩码处理的原始字符串。
left_margin: INT 类型,左端保留的字符数量(不被掩码替换)。
right_margin: INT 类型,右端保留的字符数量(不被掩码替换)。
mask_char(可选): STRING 类型,用于替换中间部分的掩码字符,默认为 'X'。
返回结果
返回一个 STRING 类型的值,其中左端 left_margin 个字符和右端 right_margin 个字符保持不变,中间部分的每个字符被替换为 mask_char。
使用示例
-
基本用法,使用默认掩码字符 'X':
SELECT mask_inner('This is a string', 1, 5);
+-------------------------------------------+
| mask_inner('This is a string', 1, 5) |
+-------------------------------------------+
| TXXXXXXXXXXtring |
+-------------------------------------------+
-
指定自定义掩码字符 '*':
SELECT mask_inner('This is a string', 1, 5, '*');
+------------------------------------------------+
| mask_inner('This is a string', 1, 5, '*') |
+------------------------------------------------+
| T**********tring |
+------------------------------------------------+
-
处理包含中文字符的字符串:
SELECT mask_inner('abc 你好, 世界 end', 1, 5);
+------------------------------------------------+
| mask_inner('abc 你好, 世界 end', 1, 5) |
+------------------------------------------------+
| aXXXXXXXXXXXXXX界 end |
+------------------------------------------------+
-
当输入为 NULL 时:
SELECT mask_inner(NULL, 2, 3);
+------------------------+
| mask_inner(NULL, 2, 3) |
+------------------------+
| NULL |
+------------------------+
注意事项
- 当输入字符串
str 为 NULL 时,返回结果为 NULL。
- 默认掩码字符为
'X',可通过第四个参数自定义。
left_margin 和 right_margin 基于字符数量(而非字节数),因此对多字节字符(如中文)同样按字符计数。
- 当
left_margin + right_margin 大于或等于字符串长度时,不会进行掩码替换,返回原始字符串。
- 该函数与
mask_outer 函数互补:mask_inner 掩码中间部分、保留两端,mask_outer 掩码两端、保留中间部分。