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 问题描述

示例如下所示

oracle特殊符号去除问题

 

 

 

2-1-2 问题解答

以上出现特殊符号后如果该字段确保只需要中文汉字其他的什么都不要的话可以使用以下正则

 

oracle特殊符号去除问题

select regexp_replace('丹参滴丸多对的212121', '[^[:alpha:]]', '') AS OPSCOPE from dual;

 

 

2-2 空字符问题(NUL)

2-2-1 问题描述

当出现以下字段有NUL特殊字符时也可以使用正则去匹配

oracle特殊符号去除问题

 

 

2-2-2 问题解答

以上出现特殊符号后如果该字段确保只需要数字的情况下可以使用以下正则

 

oracle特殊符号去除问题

select regexp_replace('156s22,f33对的', '[^[:digit:]]', '') AS OPSCOPE from dual;

 

2-3 设备控制二(DC2)

2-3-1 问题描述

这个特殊符号实在没有见过,这次长见识了。

oracle特殊符号去除问题

 

2-3-2 问题解答

以上出现特殊符号后如果该字段确保只需要中文加数字的情况下可以使用正则

oracle特殊符号去除问题

select regexp_replace('156s22,f33对的', '[^[:alnum:]]', '') AS OPSCOPE from dual;

3 常用oracle函数

3-1 全角转半角实例

Select  to_single_byte('京东(北京)科技有限公司')  from dual;

oracle特殊符号去除问题

 

 

3-2 去除去除单双引号

select regexp_replace(to_single_byte('京东(北京)""科技有限公司'),'^|"','') from dual;

 

oracle特殊符号去除问题

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)