最近在搞Oracle相关的工作,发现在Oracle中可以储存特殊符号的,但是把数据放到其他的数据库里面就不可以了,例如PG中,为了解决脏数据的问题,作者可是费了不少的心思啊!!把这段时间遇到的问题总结一下,也希望大家遇到了之后方便解决。
https://blog.csdn.net/xfg0218/article/details/80901752
https://blog.csdn.net/gxftry1st/article/details/22489275
网上很多说replace的,个人感觉replace不好玩,没有regexp_replace功能强大,使用方便
示例如下所示
以上出现特殊符号后如果该字段确保只需要中文汉字其他的什么都不要的话可以使用以下正则
select regexp_replace('丹参滴丸多对的212121', '[^[:alpha:]]', '') AS OPSCOPE from dual;
当出现以下字段有NUL特殊字符时也可以使用正则去匹配
以上出现特殊符号后如果该字段确保只需要数字的情况下可以使用以下正则
select regexp_replace('156s22,f33对的', '[^[:digit:]]', '') AS OPSCOPE from dual;
这个特殊符号实在没有见过,这次长见识了。
以上出现特殊符号后如果该字段确保只需要中文加数字的情况下可以使用正则
select regexp_replace('156s22,f33对的', '[^[:alnum:]]', '') AS OPSCOPE from dual;
Select to_single_byte('京东(北京)科技有限公司') from dual;
select regexp_replace(to_single_byte('京东(北京)""科技有限公司'),'^|"','') from dual;
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
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)