SQL:
SQL>
SQL> with tmp as(select '4D$$E059509BAF139C' a from dual)
2 select a, translate(a, '.0123456789', '.') 去掉数字,
3 replace(translate(a, translate(a, '.0123456789', '.'), '.'), '.') 保留数字,
4 regexp_replace(a, '[^0-9]*') 保留数字,
5 regexp_replace(a, '[0-9]*') 去掉数字
6 from tmp
7 /
A 去掉数字 保留数字 保留数字 去掉数字
------------------ ------------------------------------ ------------------------------------ --------
4D$$E059509BAF139C D$$EBAFC 4059509139 4059509139 D$$EBAFC
对字符串: 4D$$E059509BAF139C
实现两个目的:
1、取出里面的全部数字;
2、去掉里面的全部数字;
解释:
正则表达式做法:
regexp_replace(a, '[^0-9]*') 保留数字。方法是替换掉字符串中非数字的字符
regexp_replace(a, '[0-9]*') 去掉数字。方法是替换掉字符串中数字字符
非正则表达式做法:
translate(a, '.0123456789', '.') 去掉数字。方法是用translate转换,“.”转换为“.”,数字转换为空。不能直接转换为空,这样结果就为空了。
replace(translate(a, translate(a, '.0123456789', '.'), '.'), '.')
去掉非数字(通用做法,可以支持9i)。方法是去掉数字,保留字符,再根据字符,反过来获得数字。这样做是因为数字是可枚举的,非数字却不能。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12932950/viewspace-709460/
,如需转载,请注明出处,否则将追究法律责任。