Oracle提取字符串中“汉字”串的解决办法

2015-01-21 12:22:18 · 作者: · 浏览: 6

我们在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为了保证数据的质量,往往需要对数据进行清洗,就是去掉特殊字符,我们处理问题的思路是:判断字符串中的每个字符是不是中文,如果是中文,将他们按照顺序连接起来,如果不是,不要。


根据实际业务需求,共有2中解决方案:


方案一:


使用数据库自带函数length,lengthb。


中文下length返回的是字符个数,中文占1字符,lengthb返回的是字节个数,中文占2字节,根据中文的特性即可解决,但是实际情况往往不是特别理想,往往还存在着一些特殊字符,这些特殊字符和中文的字符数和字节数一致,这时我们就不能准确判断数据库中的中文字符了,为了解决这个问题,建议方案二。


方案二:


这种方式可以完美区分中文字符和其它字符。


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? ? ? ? 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中的实现方式,通过该方式可以快速,准确的识别中文字符。