oracle特殊符号去除问题
最近在搞Oracle相关的工作,发现在Oracle中可以储存特殊符号的,但是把数据放到其他的数据库里面就不可以了,例如PG中,为了解决脏数据的问题,作者可是费了不少的心思啊!!把这段时间遇到的问题总结一下,也希望大家遇到了之后方便解决。
1 特殊符号问题方法
1-1特殊符号查看表
https://blog.****.net/xfg0218/article/details/80901752
1-2 regexp_replace用法实例
https://blog.****.net/gxftry1st/article/details/22489275
1-3 replace 用法实例
网上很多说replace的,个人感觉replace不好玩,没有regexp_replace功能强大,使用方便
2 问题汇总
2-1 文件分隔符问题(FS)
2-1-1 问题描述
示例如下所示
2-1-2 问题解答
以上出现特殊符号后如果该字段确保只需要中文汉字其他的什么都不要的话可以使用以下正则
select regexp_replace('丹参滴丸多对的212121', '[^[:alpha:]]', '') AS OPSCOPE from dual;
2-2 空字符问题(NUL)
2-2-1 问题描述
当出现以下字段有NUL特殊字符时也可以使用正则去匹配
2-2-2 问题解答
以上出现特殊符号后如果该字段确保只需要数字的情况下可以使用以下正则
select regexp_replace('156s22,f33对的', '[^[:digit:]]', '') AS OPSCOPE from dual;
2-3 设备控制二(DC2)
2-3-1 问题描述
这个特殊符号实在没有见过,这次长见识了。
2-3-2 问题解答
以上出现特殊符号后如果该字段确保只需要中文加数字的情况下可以使用正则
select regexp_replace('156s22,f33对的', '[^[:alnum:]]', '') AS OPSCOPE from dual;
3 常用oracle函数
3-1 全角转半角实例
Select to_single_byte('京东(北京)科技有限公司') from dual;
3-2 去除去除单双引号
select regexp_replace(to_single_byte('京东(北京)""科技有限公司'),'^|"','') from dual;
3-3 去除字段中最后一个特殊符号问题
ABUITEM 是字段的名字
case when length(regexp_replace(substr(ABUITEM,length(ABUITEM),(length(ABUITEM)-1)),'[^[:alnum:]]', '')) = 1 then ABUITEM
else substr(ABUITEM,0,length(ABUITEM)-1)
end as ABUITEM
3-4 去除到处第二个特殊符号问题
OPSCOPE 是字段的名字
69 是该字段截取后的长度
when length(substr(OPSCOPE,0,length(OPSCOPE)-2)) = 69 then substr(OPSCOPE,0,length(OPSCOPE)-2)||substr(OPSCOPE,length(OPSCOPE),length(OPSCOPE)-1)