ORACLE提取字符串中"汉字"串的解决办法
2014-11-28 10:15
239 查看
我在在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为了保证数据的质量,往往需要对数据进行清洗,就是去掉特殊字符,我们处理问题的思路是:判断字符串中的每个字符是不是中文,如果是中文,将他们按照顺序连接起来,如果不是,不要。
根据实际业务需求,共有2中解决方案:
方案一:
使用数据库自带函数length,lengthb。
中文下length返回的是字符个数,中文占1字符,lengthb返回的是字节个数,中文占2字节,根据中文的特性即可解决,但是实际情况往往不是特别理想,往往还存在着一些特殊字符,这些特殊字符和中文的字符数和字节数一致,这时我们就不能准确判断数据库中的中文字符了,为了解决这个问题,建议方案二。
方案二:
使用ASCII码来区分中文和其它字符,中文的ASCII码值的范围是45217~63486,根据这个来实现,我们就需要使用ORACLE中的函数ASCII,用它来返回ASCII值。
这种方式可以完美区分中文字符和其它字符。
根据实际业务需求,共有2中解决方案:
方案一:
使用数据库自带函数length,lengthb。
中文下length返回的是字符个数,中文占1字符,lengthb返回的是字节个数,中文占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中的实现方式,通过该方式可以快速,准确的识别中文字符。
相关文章推荐
- 出现 "System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本" 错误的解决办法
- "需要 Oracle 客户端软件 8.1.7 或更高版本"解决办法
- Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法
- Oracle进行增删改查时提示"ORA-00959:xxx表空间不存在"解决办法
- net下中文汉字作为URL字符串参数的解决办法
- Code=3000 "未找到应用程序的“aps-environment”的权利字符串" 解决办法
- "未找到 Oracle 客户端和网络组件。这些组件是.."的解决办法
- Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法
- oracle安装时出现"加载数据库错误areasQueries"错误的解决办法
- 解决DevExpress Grid"输入字符串的格式不正确“问题的正确办法
- "System.Data.OracleClient 需要 Oracle客户端软件8.1.7或更高版本"的解决办法
- Oracle 关于报错"ORA-01747: user.table.column, table.column 或列说明无效"的终极解决办法
- 出现 "System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本" 错误的解决办法
- .net下,中文汉字作为URL字符串参数的解决办法
- 当打开Oracle Jdevelopler 11g时出现"Unable to create an instace of the jave virtual Machine Located at path"错时解决办法
- [原]在Oracle SOASUITE 10g Register ESB 报“The exception reported is: "javax.transaction.RollbackException: Timed out”问题的解决办法
- Asp.Net 连接Oracle数据库 出现"找到 Oracle 客户端和网络组件" 的解决方法!(在win2003 ntfs 下IIS发布只显示登陆界面 不进入系统解决办法)
- php提取csv格式文件中的字符串出现的问题及解决办法
- Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法
- 系统提示"System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本"解决办法