oracle汉字检索

      第一篇自己写的东西,内容有点简单,还是记下来和大家分享下。因为觉得重要的可能不是内容,而是一种变通的思维。

     今天有一个需求,要在oracle中检索出某个字段是否含有汉字,根据是否含有汉字进行约束。第一个想法是正则表达式(对这部分不是很熟),但是百度了很久也没看到(现在还不

知道是否有这样的正则表达式,欢迎高人赐教)。

 

    后来想到汉字的特殊性,即一个汉字占两个字节,后来根据lengthb()函数进行区分,如果length(某字段)<>lengthb(某字段)说明该字段中含有汉字。

    原理如下  select   length('21幢301室')   from  dual;  其结果为7;

                      select   lengthb('21幢301室')   from  dual;  其结果为9; 

    即lengthb()函数返回字符串的字节数,根据这个就可以判断了,如果对同一个字段分别取length()与lengthb(),如果相等即不含汉字。

    只是换了一种解决问题的方法从正则表达式换到其他函数,问题似乎就很简单的解决了,只是转了个弯,收获很大。

    写到这里,欢迎高手指教!

    2013-8-19补充:今天看书时谈到了oracle的字符集,其中有单字节字符集和多字节字符集之分,两种字符集的区别是存储字符时是按照一个字节存储一个字符,还是多个字节存储一个字符。所以,以上描述的就有问题,可能并不是在所有情况下length与lengthb都是不同的,但针对具体的汉字,一般选用的字符集是多字节字符集,因此这种方法可行,但之前的理解却狭隘了。真是学的东西越多越发现自己欠缺的东西越多。

    

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值