我在在實際工作中常常要使用去特殊字符的功能,特別是插入到數據庫中的數據,我們為了保證數據的質量,常常需要對數據進行清洗,就是去掉特殊字符,我們處理問題的思路是:判斷字符串中的每一個字符是否是中文,如果是中文,將他們依照順序連接起來,如果不是,不要。
根據實際業務需求,共有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中的實現方式,通過該方式可以快速,準確的辨認中文字符。