国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > 数据库应用 > ORACLE提取字符串中"汉字"串的解决办法

ORACLE提取字符串中"汉字"串的解决办法

来源:程序员人生   发布时间:2014-12-11 08:48:03 阅读次数:4246次

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

根据实际业务需求,共有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中的实现方式,通过该方式可以快速,准确的辨认中文字符。


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生