工作中经常会处理一些因特殊字符而导致的错误,如上周我就遇到了因为换行符和回车符导致的数据上报的错误,这种错误比较难以发现,通常是由于用户的输入习惯导致的,有可能数据极少,就那么几行错误从而导致整个数据上报失败。处理这种错误可以通过应用端对数据进行过滤、处理,但最简单方便的方法就是通过SQL语句在数据库源端直接处理掉,把特殊字符替换掉等处理,利用replace函数结合CHR()函数或ASCII()函数替换掉特殊字符。
CHR()函数:将ASCII码转换为字符
ASCII()函数:将字符转换为ASCII码
下面是常见字符与ascii对照表,以供参考:
第一部分由 00H 到 1FH 共 32 个,一般用来通讯或作为控制之用,有些字符可显示于屏幕,有些则无法显示在屏幕上,但能看到其效果(例如换行字符、归位字符)。
第二部分是由 20H 到 7FH 共 96 个,这 95 个字符是用来表示阿拉伯数字、英文字母大小写和底线、括号等符号,都可以显示在屏幕上。如下表:
第三部分由 80H 到 0FFH 共 128 个字符,一般称为『扩充字符』,这 128 个扩充字符是由 IBM 制定的,并非标准的 ASCII 码。这些字符是用来表示框线、音标和其它欧洲非英语系的字母。
最近一次处理回车及换行数据的过程:
--处理换行 update sm_testrexxxxxx t set value=replace(value,char(10),'') where t.recordtimestamp>= to_date('2016-01-01','YYYY-MM-DD HH24:MI:SS') and t.teststateid in (select teststateid from sm_teststxxxxxx r where r.name like '%检验结论%' and r.teststateid=t.teststateid); --处理回车 update sm_testrexxxxxx t set value=replace(value,char(13),'') where t.recordtimestamp>= to_date('2016-01-01','YYYY-MM-DD HH24:MI:SS') and t.teststateid in (select teststateid from sm_teststxxxxxx r where r.name like '%检验结论%' and r.teststateid=t.teststateid); --验证是否还有回车和换行(查询出结果粘在文本框能看出) select distinct value,'12' from sm_testrexxxxxx t where t.recordtimestamp>= to_date('2016-01-01','YYYY-MM-DD HH24:MI:SS') and t.teststateid in (select teststateid from sm_teststxxxxxx r where r.name like '%检验结论%' and r.teststateid=t.teststateid);
部分内容转自:http://blog.sina.com.cn/s/blog_9d5f7ceb01012i44.html
-----------------------学习留存--------------------------------