oracle 判断字段是否是包含6,Oracle判断字段中是否包含中文(若有,取出该中文的方法)...

一、问题说明

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

二、解决办法

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

1、采用ASCIISTR函数

c46e1b8e66bcd50fb0f4c8ed916c8783.png

说明:ASCIISTR函数用于返回字符的ASCII形式的字符串;非ASCII的字符被转化为\xxxx的形式。换句话说:如果字符中包含中文,则必定会有\xxxx的字符。

所以,我们直接利用ASCIISTR函数匹配'\'即可判断。

2、采用length和lengthb的原理

5e670c9adc714cb3a6c799f34b525553.png

说明:中文下length返回的是字符个数,中文占1字符,lengthb返回的是字节个数,中文占2字节,根据中文的特性即可解决。

3、使用CONVERT函数判别

af1e4f710ead124c9b3c185f7b27fa4c.png

说明:CONVERT(要转换的字符串,目标字符集,原字符集),CONVERT函数用于转换字符串的字符集;所以我们可以利用中文的字符集是utf-8来判断。

上面介绍了如何判断某个字段字符串中是否有中文,在成功判断字段中是否有中文之后;那么该如何取出字段中的中文呢?

这里介绍一种快速准确的办法:

f82f1345dc25119968665fc645b0e8cc.png

函数创建成功后,直接传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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值