You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:24:06