Oracle 判断中文及全角、半角详解

文章目录

1 结论

思路:
(1) 去除特殊字符,避免 '全角' 字符,'《》' 等字符的影响
(2) 依据:'中文字节长度 > 英文字节长度'    
with t_source_string as -- 源字符串
  (select 1 id, '12中文abc!!' str from dual union all
   select 2 id, '34abc!!》'   str from dual)
select t.*
  from t_source_string t
 where lengthb(regexp_replace(t.str, '[[:punct:]]', '')) > 
       length(regexp_replace(t.str, '[[:punct:]]', '')); 

 
 

2 详解

1. lengthb()"字节" 长度,1 个字母 = 1 个字节,1 个中文 = 2 个字节。
   length()"字符" 长度,1 个字母 = 1 个字符,1 个中文 = 1 个字符。   
2. to_single_byte('x'):将 x 转换为 "半角"
   to_multi_byte('x') :将 x 转换为 "全角"   
   半角全角主要是针对 "标点符号" 来说的,全角标点占两个字节,半角占一个字节.
3. 特别的,如 "《""》"
   select lengthb('《') a, -- 2
          length('《') b,  -- 1
          lengthb('》') c, -- 2
          length('》') d -- 1
     from dual;  
-- '!':半角,1 个字节
-- '!': 全角,2 个字节
select lengthb('!') 半角字节长度,
       lengthb('!') 全角字节长度,
       length('!') 半角字符长度,
       length('!') 全角字符长度,
       to_single_byte('!') 转半角,
       to_multi_byte('!') 转全角
  from dual;

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值