oracleデータにおける特殊文字処理


最近のデータ処理では、数字に多くの文字が含まれていることがよく見られますが、実行過程で「ORA-01722:invalid number」という異常が報告されています.整理すると、以下の方法で削除できます.
1、replaceは使い方が簡単で、書き方が複雑で、既知の文字しか処理できない
  With test_table1 As (
    Select 1 seq_num, '2134?654?ag d35' strings From dual     
     Union All    
    Select 2 seq_num, '651 354a g5 dd21' strings From dual
    ) 
Select seq_num, Replace(Replace(Replace(Replace(Replace(strings, '?', ''), 'a', ''), 'g', ''), 'd', ''), ' ', '') 
  From test_table1;
  
  ---    
  1    213465435
  2    651354521

2、translateの使い方は簡単で、書き方は簡単で、既知の文字しか処理できません.文字列、検索対象の文字、置換文字はnullではありません.そうしないとnullを返します.文字列は検索順に置換されます.なければ除去されます.
  With test_table1 As (
    Select 1 seq_num, '2134?654?ag d35' strings From dual
     Union All    
    Select 2 seq_num, '651 354a g5 dd21' strings From dual
    ) 
Select seq_num,
 translate(strings, '1asdfasg ?', '1') 
  From test_table1;
  
  ---    
  1    213465435
  2    651354521

3、regexp_replace正規表現強化型replaceパラメータが多く、正規式に従ってすべての文字を処理できます.
  With test_table1 As (
    Select 1 seq_num, '2134?654?ag d35' strings From dual
     Union All    
    Select 2 seq_num, '651 354a g5 dd21' strings From dual
     Union All    
    Select 3 seq_num, '2134654?ag d35' strings From dual
     Union All    
    Select 4 seq_num, '16?54?aasdgf78as' strings From dual
     Union All    
    Select 5 seq_num, '16?!@#$%^&*()~:"+_?><|~8as' strings From dual
    ) 
Select seq_num,
 regexp_replace(strings, '[^0-9]', '')  
  From test_table1;
 
 ---    
 1    213465435
 2    651354521
 3    213465435
 4    165478
 5    168

注:これらは以前に書いたもので、OSCに移行しました.ブログの原文:http://www.cnblogs.com/godsweet/p/3274947.html