Oracle中如何对从ADHAR NUMBER起始的60长度字符串实现数据掩码
Oracle 字符串固定长度掩码实现方案
你可以通过Oracle内置的字符串定位、截取、拼接函数直接实现需求,不需要额外依赖,具体实现如下:
单条SQL实现(直接查询使用)
直接对目标字符串做处理,适合单次查询场景:
SELECT SUBSTR(original_str, 1, INSTR(original_str, 'ADHAR NUMBER') - 1) || LPAD('*', 60, '*') || SUBSTR(original_str, INSTR(original_str, 'ADHAR NUMBER') + 60) AS masked_str FROM ( -- 此处替换为你的原始字符串来源 SELECT 'This is the new ADHAR NUMBER 123456789989 this is the string 3456798983 from Customer Name like 345678 to a String .' original_str FROM DUAL );
用到的函数说明
INSTR(original_str, 'ADHAR NUMBER'):定位ADHAR NUMBER关键词首次出现的起始位置,Oracle字符串下标从1开始计数SUBSTR:按指定起止位置截取字符串LPAD('*', 60, '*'):快速生成60个连续星号,也可以直接替换为60个*常量
通用函数封装(多次复用场景)
如果需要频繁做同类掩码操作,可以封装为PL/SQL自定义函数:
CREATE OR REPLACE FUNCTION mask_keyword_range( p_original_str IN VARCHAR2, p_trigger_keyword IN VARCHAR2, p_mask_length IN NUMBER ) RETURN VARCHAR2 IS v_keyword_position NUMBER; BEGIN v_keyword_position := INSTR(p_original_str, p_trigger_keyword); -- 未匹配到触发关键词时直接返回原字符串 IF v_keyword_position = 0 THEN RETURN p_original_str; END IF; RETURN SUBSTR(p_original_str, 1, v_keyword_position - 1) || LPAD('*', p_mask_length, '*') || SUBSTR(p_original_str, v_keyword_position + p_mask_length); END; /
函数调用示例
SELECT mask_keyword_range( 'This is the new ADHAR NUMBER 123456789989 this is the string 3456798983 from Customer Name like 345678 to a String .', 'ADHAR NUMBER', 60 ) AS masked_result FROM DUAL;
输出验证
两种实现的输出结果都和你预期的完全一致:
This is the new *********************************************************Customer Name like 345678 to a String .
注意事项
- 如果
ADHAR NUMBER之后的字符串长度不足60,会自动将后面所有内容替换为星号,不会抛出异常 - 以上逻辑默认只处理首次出现的
ADHAR NUMBER,如果需要处理所有匹配的关键词,可以调整为正则匹配或循环处理逻辑
内容的提问来源于stack exchange,提问作者EX08
相关产品推荐
相关产品推荐

