程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORACLE提取字符串中"漢字"串的解決辦法

ORACLE提取字符串中"漢字"串的解決辦法

編輯:Oracle教程

ORACLE提取字符串中"漢字"串的解決辦法


我在在實際工作中常常要使用去特殊字符的功能,特別是插入到數據庫中的數據,我們為了保證數據的質量,往往需要對數據進行清洗,就是去掉特殊字符,我們處理問題的思路是:判斷字符串中的每個字符是不是中文,如果是中文,將他們按照順序連接起來,如果不是,不要。

根據實際業務需求,共有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中的實現方式,通過該方式可以快速,准確的識別中文字符。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved