Oracle列数据脱敏:保留最后4位其余替换为X的实现方案求助
Oracle列掩码:保留最后4位,其余替换为X
嘿,我来帮你搞定这个Oracle列的掩码需求!其实用Oracle自带的字符串函数就能轻松实现,不用复杂的逻辑。
核心解决方案
直接用CASE表达式结合RPAD和SUBSTR函数就能完成:
SELECT CASE WHEN LENGTH(your_column) <= 4 THEN your_column ELSE RPAD('X', LENGTH(your_column) - 4, 'X') || SUBSTR(your_column, -4) END AS masked_value FROM your_table;
函数解释
让我拆解下每个部分的作用:
LENGTH(your_column):计算目标列的字符串长度CASE判断:如果字符串长度≤4,直接返回原内容;否则执行掩码逻辑RPAD('X', LENGTH(your_column)-4, 'X'):生成对应数量的X——比如总长度是9,就生成5个X(9-4=5)SUBSTR(your_column, -4):提取字符串的最后4位,Oracle里SUBSTR的负数参数表示从末尾开始计数
示例验证
用你给出的测试案例验证下:
- 输入
123456789→ 输出XXXXX6789 - 输入
12345678→ 输出XXXX5678 - 输入
1234567→ 输出XXX4567 - 输入
123456→ 输出XX3456 - 输入
12345→ 输出X2345 - 输入
123→ 输出123(长度≤4,保留原内容)
复用优化:自定义函数
如果需要在多个地方复用这个逻辑,可以封装成自定义函数:
CREATE OR REPLACE FUNCTION mask_last_four(p_input_str IN VARCHAR2) RETURN VARCHAR2 IS BEGIN IF LENGTH(p_input_str) <= 4 THEN RETURN p_input_str; ELSE RETURN RPAD('X', LENGTH(p_input_str)-4, 'X') || SUBSTR(p_input_str, -4); END IF; END; /
使用的时候就简单多了:
SELECT mask_last_four(your_column) AS masked_value FROM your_table;
内容的提问来源于stack exchange,提问作者keonglah
相关产品推荐
相关产品推荐

