oracle 中文,汉字判断

本文介绍了一种用于判断字符串是否为全角中文字符的方法,并提供了一个实用的函数。此外,还探讨了如何验证姓名的有效性,包括使用替换、正则表达式及函数分解等不同方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1:判断是否中文, 也就是是否全半角
方式1.asciistr(name) like ‘%\%’
方式2.length(a)!=lengthb(b)
备注:
转半角函数:to_single_byte
转全角函数:TO_MULTI_BYTE
比如:
select length(‘哈.哈’),lengthb(‘哈.哈’) from dual;

问题2:判断 姓名,
注意,姓名是汉字,不是中文!

在这里插入图片描述
有3种方式

1.替换所有标点字母数字,剩下的就是汉字(不推荐)
2.直接使用正则(有缺陷)


--这种只对部分中文有效,多以不行的,比如小明就无法识别
select * from dual  where regexp_like('小明','[' || unistr('\4e00') || '-' || unistr('\9fa5') || ']');
类似这个也是不行的, java的话是可以识别的
SELECT * from dual where '哈哈' NOT LIKE '([\\u4e00-\\u9fa5])+' ;

3.使用函数分解字符判断


--判断是否全中文
create or replace function gbs_check_hanzi(p_str varchar2) 
return pls_integer deterministic
as
--0 不是 1是
v_flag pls_integer :=0;
v_temp varchar2(4);
begin
  if p_str is null then 
    return 0;
  end if;
  
  for x in 1.. length(p_str) loop
  v_temp:=substr(p_str,x,1);
   -- dbms_output.put_line(substr(p_str,x,1));
    if  asciistr(v_temp) between '\4E00' and '\9FA5' then 
      v_flag:=1;
    else
      return 0;
    end if;
  end loop;
  return v_flag;
end;

上面的截图中 汉字问题可以在这个函数基础上改造一下就可以了;
至于英文问题那就直接使用正则就可以判断了;

--匹配A B形式,这里空格最多一个 或者A·B  ·最多一个
例子如下:
select * from dual  where regexp_like('aah  sakjhs','^[A-Za-z]+ ?[A-Za-z]+$')
or regexp_like('aahsa·kjhs','^[A-Za-z]+·?[A-Za-z]+$')
create table ysy_tab3
(
  eno varchar2(10),
   ename varchar(40)
);


insert into ysy_tab3 (ENO, ENAME)
values ('1', '小明');

insert into ysy_tab3 (ENO, ENAME)
values ('2', '赵赵丽颖');

insert into ysy_tab3 (ENO, ENAME)
values ('3', '天下霸唱');

insert into ysy_tab3 (ENO, ENAME)
values ('4', '猎杀T34');

insert into ysy_tab3 (ENO, ENAME)
values ('5', '终结者3');

insert into ysy_tab3 (ENO, ENAME)
values ('6', 'tom');

insert into ysy_tab3 (ENO, ENAME)
values ('7', 'tom hello');

select gbs_check_hanzi(aa.ename),aa.ename from ysy_tab3 aa;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值