Oracle中的CHR()函数与ASCII()函数

      工作中经常会处理一些因特殊字符而导致的错误,如上周我就遇到了因为换行符和回车符导致的数据上报的错误,这种错误比较难以发现,通常是由于用户的输入习惯导致的,有可能数据极少,就那么几行错误从而导致整个数据上报失败。处理这种错误可以通过应用端对数据进行过滤、处理,但最简单方便的方法就是通过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

-----------------------学习留存--------------------------------

原文地址:https://www.cnblogs.com/myrunning/p/6197581.html