我试着在这里找到解决方案,但没有运气,所以我试着在这里提出一个问题,看看谁可以帮助我。
请参阅主题,我想将所有字符替换为“X”,但Oracle列的最后4个字符或更少字符除外。
例如:
我尝试使用下面的语句,但似乎不适用于案例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
也许有人可以帮忙吗?
提前感谢。
答案 0 :(得分:7)
这样的东西适用于更长的字符串:
LPAD(SUBSTR('123456789',-4),LENGTH('123456789'),'X')
我会将其包装在CASE声明中
CASE
WHEN LENGTH(<your string>) > 4
THEN LPAD(SUBSTR(<your string>,-4),LENGTH(<your string>),'X')
ELSE <your string>
END
其他一些人会发布美丽的正则表达式答案,这些答案让我着迷,因为我可以阅读它们但不能生成它们