我在在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为了保证数据的质量,常常需要对数据进行清洗,就是去掉特殊字符,我们处理问题的思路是:判断字符串中的每一个字符是否是中文,如果是中文,将他们依照顺序连接起来,如果不是,不要。
根据实际业务需求,共有2中解决方案:
方案1:
使用数据库自带函数length,lengthb。
中文下length返回的是字符个数,中文占1字符,lengthb返回的是字节个数,中文占2字节,根据中文的特性便可解决,但是实际情况常常不是特别理想,常常还存在着1些特殊字符,这些特殊字符和中文的字符数和字节数1致,这时候我们就不能准确判断数据库中的中文字符了,为了解决这个问题,建议方案2。
方案2:
使用ASCII码来辨别中文和其它字符,中文的ASCII码值的范围是45217~63486,根据这个来实现,我们就需要使用ORACLE中的函数ASCII,用它来返回ASCII值。
这类方式可以完善辨别中文字符和其它字符。
create or replace function getCustText(custName varchar2) return varchar2 is Result varchar2(100); tmp_custName varchar2(100); count_str number; i number:=1; str_ascii number; current_char varchar2(10); begin select length(custName) into count_str from dual; while i<count_str loop current_char:=substr(custName,i,1); select ASCII(current_char) into str_ascii from dual; if str_ascii>45216 then tmp_custName:=tmp_custName||current_char; end if; i:=i+1; end loop; Result:=tmp_custName; return(Result); end getCustText;以上是ORACLE中的实现方式,通过该方式可以快速,准确的辨认中文字符。