【发布时间】:2018-10-01 01:25:28
【问题描述】:
我试图在这里找到解决方案但没有运气,所以我尝试在这里提出一个问题,看看谁能帮助我。
请参阅主题,我想将所有字符替换为“X”,Oracle 列的最后 4 个字符或更少字符除外。
例如:
- 123456789 将变为 XXXXX6789(前 5 个字符更改为 X)
- 12345678 将变为 XXXX5678(前 4 个字符更改为 X)
- 1234567 将变为 XXX4567(前 3 个字符更改为 X)
- 123456 将变为 XX3456(前 2 个字符更改为 X)
- 12345 将变为 X2345(第一个字符变为 X)
- 1234 将变为 1234(保持不变)
- 123 将变为 123(保持不变)
- 12 将变为 12(保持不变)
- 1 将变为 1(保持不变)
我尝试使用下面的语句,但似乎不适用于案例 8 和 9。
1) 不返回任何内容而不是 '1'。
Select RPAD('X',length('1')-4,'X') || substr('1',length('1')-4,length('1')) from dual
2) 返回“2”而不是“12”。
Select RPAD('X',length('12')-4,'X') || substr('12',length('12')-4,length('12')) from dual
我尝试使用下面的另一个语句,但是它返回 'XX67XX' 而不是 'XX6745'。
我猜有重复的数字导致它返回无效值。
select REPLACE('456745', substr('456745',1,length('456745')-4), RPAD('*',length('456745')-4,'X')) From dual
也许有人可以帮忙?
提前致谢。
【问题讨论】:
-
如果这是应用程序安全要求,我们的编辑策略功能允许将此正则表达式应用于列,因此应用程序层中的代码不需要更改 - 只需查询您的号码,它就会被编辑出来数据库
标签: oracle