关于字符串分类抽取的几个方法

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)。方法是去掉数字,保留字符,再根据字符,反过来获得数字。这样做是因为数字是可枚举的,非数字却不能。

请使用浏览器的分享功能分享到微信等