oracle 判断值中是否存在汉字

WITH X AS
 (SELECT '2320*fd少df,' SR
    FROM DUAL
  UNION ALL
  SELECT '¥@().' SR
    FROM DUAL
  UNION ALL
  SELECT 'heleo;""' SR
    FROM DUAL
  UNION ALL
  SELECT '年' SR
    FROM DUAL
  UNION ALL
  SELECT 'ds★强f' SR
    FROM DUAL
  UNION ALL
  SELECT '350k, 。' SR
    FROM DUAL
  UNION ALL
  SELECT 'a #@%&*则 df
       ' SR
    FROM DUAL
  UNION ALL
  SELECT 'DSA~!国强' SR
    FROM DUAL
     UNION ALL
  SELECT '龘楇覢' SR
    FROM DUAL)
SELECT SR
  FROM (SELECT REGEXP_REPLACE(REGEXP_REPLACE(SR, '\W'), '[a-zA-Z0-9_]') SR
          FROM X)
 WHERE SR IS NOT NULL;

之前有遇到查询表里某列是否含有汉字的需求。

百度上有很多方法。大体上都是利用ASCIISTR(COL) LIKE'%\%',ASCIISTR(将任意字符集的字符串转换为当前数据库实例对应的ascii字符串)。利用汉字是双字节,且简体汉字的编码范围是B0A1 - F7FE ,通过ASCIISTR(COL) 转换UTF-16格式 过来后,每个汉字前面带有一个 反斜杠 来判断的。这样一点都不科学。简体汉字转换过来带有反斜杠,不代表转换过来的带有反斜杠的一定是简体汉字。比如五角星、全角字符之类的。还有这里一直说的是简体汉字。遇到繁体字就GG思密达了。

还有一些人写了很复杂的FUNCTION来判断。这个我也试过了,遇到全角和某些繁体字也是行不通。

还有的使用length()与lengthb()来判断,也是利用汉字是双字节。这个更是错的。全、半角的长度都能推翻。

SELECT LENGTH('-') LG, --半角横杠
       LENGTHB('-') LG2, --全角横杠
       ASCIISTR('国') SR, --转换中文简体
       ASCIISTR('f') SR2 --转换全角字符
          FROM DUAL;

一直提倡,写出来的SQL,一定是通用的。这里我是利用正则写了一个很简单的滤除。大家可以参考下,利用的是 \W:匹配字母或数字或下划线或汉字。目前我测试还是没出现问题的。大家使用时遇到问题可以告诉我。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值