如何在Oracle中屏蔽包含电话号码的字符串?

时间:2014-03-11 08:33:40

标签: string oracle masking

我有一张如下表格;

ID(int) | P_DATE(date) | EXPLANATION(varchar2)
-----------------------------------------------
1       |   22.12.2013 |   'File upload'
2       |   31.12.2013 |   'Card Payment'
3       |   24.02.2014 |   'Unit TN=5321234564'

Explanation列的第三行,有一个电话号码(5321234564)

如何使用'*'屏蔽此电话号码?

屏蔽后,select query应返回如下结果?

ID(int) | P_DATE(date) | EXPLANATION(varchar2)
-----------------------------------------------
1       |   22.12.2013 |   'File upload'
2       |   31.12.2013 |   'Card Payment'
3       |   24.02.2014 |   'Unit TN=532*****64'

1 个答案:

答案 0 :(得分:2)

如果您可以更改查询,那么很简单:

select 'Unit TN=5321234564', regexp_replace('Unit TN=5321234564', 'TN=([0-9]{3})([0-9]{5})([0-9]{2})', 'TN=\1*****\3') from dual

(当然,如果您的电话号码是其他格式,请更改正则表达式)

如果您无法更改查询,请将原始EXPLANATION列重命名为EXPLANATION_ORIG,添加EXPLANATION列并添加触发器更改INSERT'或UPDATE'd数据以将原始数据保存到{{ 1}}和屏蔽数据到EXPLANATION_ORIG列。