Oracle判断字段中是否包含中文(若有,取出该中

 我来答
就烦条0o
2018-02-05 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46488
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部

一、问题说明

在处理数据的时候,需要判断某个字段字符串中是否有中文,若有则取出中文。

二、解决办法

首先如何判断某个字段字符串中是否有中文。这里介绍三种方法:

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;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式