一、问题说明
在处理数据的时候,需要判断某个字段字符串中是否有中文,若有则取出中文。
二、解决办法
首先如何判断某个字段字符串中是否有中文。这里介绍三种方法:
1、采用ASCIISTR函数
说明:ASCIISTR函数用于返回字符的ASCII形式的字符串;非ASCII的字符被转化为\xxxx的形式。换句话说:如果字符中包含中文,则必定会有\xxxx的字符。
所以,我们直接利用ASCIISTR函数匹配'\'即可判断。
2、采用length和lengthb的原理
说明:中文下length返回的是字符个数,中文占1字符,lengthb返回的是字节个数,中文占2字节,根据中文的特性即可解决。
3、使用CONVERT函数判别
说明:CONVERT(要转换的字符串,目标字符集,原字符集),CONVERT函数用于转换字符串的字符集;所以我们可以利用中文的字符集是utf-8来判断。
上面介绍了如何判断某个字段字符串中是否有中文,在成功判断字段中是否有中文之后;那么该如何取出字段中的中文呢?
这里介绍一种快速准确的办法:
函数创建成功后,直接传jldw调用就可获取该字符的中文了。
源码如下:
createorreplacefunctiongetCustText(custNamevarchar2)returnvarchar2is
Resultvarchar2(100); --返回的结果字符串
tmp_custNamevarchar2(100); --临时变量
count_strnumber; --字符串中字符的个数
inumber:=1; --循环变量
str_asciinumber; --当前等待判断字符的ascii码
current_charvarchar2(10); --当前等待判断的字符
begin
selectlength(custName)intocount_strfromdual; --取出待处理字符串的长度
whilei
selectASCII(current_char)intostr_asciifromdual;
ifstr_ascii>45216then
tmp_custName:=tmp_custName||current_char;
endif;
i:=i+1;
endloop;
Result:=tmp_custName;
return(Result);
endgetCustText;