oracleデータにおける特殊文字処理
最近のデータ処理では、数字に多くの文字が含まれていることがよく見られますが、実行過程で「ORA-01722:invalid number」という異常が報告されています.整理すると、以下の方法で削除できます.
1、replaceは使い方が簡単で、書き方が複雑で、既知の文字しか処理できない
2、translateの使い方は簡単で、書き方は簡単で、既知の文字しか処理できません.文字列、検索対象の文字、置換文字はnullではありません.そうしないとnullを返します.文字列は検索順に置換されます.なければ除去されます.
3、regexp_replace正規表現強化型replaceパラメータが多く、正規式に従ってすべての文字を処理できます.
注:これらは以前に書いたもので、OSCに移行しました.ブログの原文:http://www.cnblogs.com/godsweet/p/3274947.html
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