MASK
描述
MASK 函数用于对数据进行屏蔽以保护敏感信息。默认行为是将大写字母转换为 X,小写字母转换为 x,数字转换为 n。
语法
MASK(<str>[, <upper>[, <lower>[, <number>]]])
参数
| 参数 | 说明 |
|---|---|
<str> | 需要被脱敏的字符串。类型:VARCHAR |
<upper> | 替换大写字母的字符,默认为 X(可选)。类型:VARCHAR |
<lower> | 替换小写字母的字符,默认为 x(可选)。类型:VARCHAR |
<number> | 替换数字的字符,默认为 n(可选)。类型:VARCHAR |
返回值
返回 VARCHAR 类型,为字母和数字被替换后的字符串。
<<<<<<< Updated upstream
- 任意参数中有一个为 NULL,则返回 NULL
- 非字母和数字会原样返回
- 仅支持ASCII字母的替换,非ASCII字母(如带重音的拉丁字母)会原样保留 ======= 特殊情况:
- 如果任意参数为 NULL,返回 NULL
- 非字母和数字字符保持不变
- 替换字符参数如果包含多个字符,只取第一个字符
Stashed changes
示例
- 基本用法:默认替换规则
SELECT mask('abc123XYZ');
+-------------------+
| mask('abc123XYZ') |
+-------------------+
| xxxnnnXXX |
+-------------------+
- 自定义替换字符
SELECT mask('abc123XYZ', '*', '#', '$');
+----------------------------------+
| mask('abc123XYZ', '*', '#', '$') |
+----------------------------------+
| ###$$$*** |
+----------------------------------+
- 特殊字符保持不变
SELECT mask('Hello-123!');
+--------------------+
| mask('Hello-123!') |
+--------------------+
| Xxxxx-nnn! |
+--------------------+
- NULL 值处理
SELECT mask(NULL);
+------------+
| mask(NULL) |
+------------+
| NULL |
+------------+
- 仅包含数字的字符串
SELECT mask('1234567890');
+--------------------+
| mask('1234567890') |
+--------------------+
| nnnnnnnnnn |
+--------------------+
- 仅包含字母的字符串
SELECT mask('AbCdEfGh');
+------------------+
| mask('AbCdEfGh') |
+------------------+
| XxXxXxXx |
+------------------+
- 空字符串处理
SELECT mask('');
+----------+
| mask('') |
+----------+
| |
+----------+
- 使用单字符替换符(多字符时取第一个)
SELECT mask('Test123', 'ABC', 'xyz', '999');
+--------------------------------------+
| mask('Test123', 'ABC', 'xyz', '999') |
+--------------------------------------+
| Xxxx999 |
+--------------------------------------+
- 脱敏信用卡号
SELECT mask('1234-5678-9012-3456');
+-----------------------------+
| mask('1234-5678-9012-3456') |
+-----------------------------+
| nnnn-nnnn-nnnn-nnnn |
+-----------------------------+
- 脱敏邮箱地址
SELECT mask('user@example.com');
+--------------------------+
| mask('user@example.com') |
+--------------------------+
| xxxx@xxxxxxx.xxx |
+--------------------------+
select mask('eeeéèêëìí1234');
+-----------------------------+
| mask('eeeéèêëìí1234') |
+-----------------------------+
| xxxéèêëìínnnn |
+-----------------------------+