oracle ^]字符,oracle数据中特殊字符处理
最近数据处理时经常发现有数字中含有大量字符,执行过程报“ORA-01722:invalidnumber”异常,整理了一下,可以有以下几种方法去除:1、replace 用法简单,写法较复杂,只能处理已知字符Withtest_table1As(Select1seq_num,'2134?654?agd35'stringsFromdualUnionAllSelect2seq_...
最近数据处理时经常发现有数字中含有大量字符,执行过程报“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?!@#$%^&*()~:"+_?>
)
Select seq_num,
regexp_replace(strings, '[^0-9]', '')
From test_table1;
---执行结果
1 213465435
2 651354521
3 213465435
4 165478
5 168
注:这些是以前所写,现转移到OSC,博客原文:外链网址已屏蔽
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)