Oracle判斷字段中是否包含中文(若有,取出該中文的方法)


一、問題說明

  在處理數據的時候,需要判斷某個字段字符串中是否有中文,若有則取出中文。

二、解決辦法

  首先如何判斷某個字段字符串中是否有中文。這里介紹三種方法:

    1、采用ASCIISTR函數

      

     說明:ASCIISTR函數用於返回字符的ASCII形式的字符串;非ASCII的字符被轉化為\xxxx的形式。換句話說:如果字符中包含中文,則必定會有\xxxx的字符。

     所以,我們直接利用ASCIISTR函數匹配'\'即可判斷。

    2、采用length和lengthb的原理

      

     說明:中文下length返回的是字符個數,中文占1字符,lengthb返回的是字節個數,中文占2字節,根據中文的特性即可解決。

    3、使用CONVERT函數判別

      

      說明:CONVERT(要轉換的字符串,目標字符集,原字符集),CONVERT函數用於轉換字符串的字符集;所以我們可以利用中文的字符集是utf-8來判斷。

  上面介紹了如何判斷某個字段字符串中是否有中文,在成功判斷字段中是否有中文之后;那么該如何取出字段中的中文呢?

  這里介紹一種快速准確的辦法:

  

  函數創建成功后,直接傳jldw調用就可獲取該字符的中文了。

源碼如下:

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; --當前等待判斷字符的ascii碼
current_char varchar2(10); --當前等待判斷的字符
begin
select length(custName) into count_str from dual; --取出待處理字符串的長度
while i<count_str loop ---根據待處理字符串長度(counts)?,逐個字符判斷處理
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;

 

 

參考資料:

   http://www.cnblogs.com/kerrycode/p/4233710.html

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM