oracle查询出含有这个值的数据如何加密或者替换,只是替换查询的结果,数据库中的数据不变

就是说对查询的数据含有这个值的值进替换或者加密。不影响值前后的数据

select * from abc  where
(regexp_instr(c,'[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]')>0) 

img

Select后面是可以接函数调用的,例如说 将查询出来的C字段转换为大写,可以使用 select upper(t.c) from abc t where
(regexp_instr(t.c,'[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]')>0) ;所以你通过写一个函数实现替换或者加密的功能,然后在select语句中调用,当然简单的替换你可以直接使用Oracle自带函数replace 或者translate函数去实现。

满意的话请采纳。

用regexp_replace或者regexp_substr,可以对满足你指定的这个正则表达式的字符串进行替换或者截取,比如

select regexp_replace('haha411081199611114568',
                      '[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]',
                      'abcdefg')
  from dual

img