關於字串分類抽取的幾個方法

regonly1發表於2011-10-21
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部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-709460/,如需轉載,請註明出處,否則將追究法律責任。

相關文章