Oracle提取字串中“漢字”串的解決辦法

來源:互聯網
上載者:User

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中的實現方式,通過該方式可以快速,準確的識別中文字元。

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

Oracle Linux 6.5安裝Oracle 11.2.0.4 x64

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.