1、楼主的标题问是否全是汉字?
2、这会儿说是不全是汉字
3、和2一样1、比较难,除非你的字段值的双字节字符肯定是汉字,否则有难度
2、这个容易,只要判断是否含有单字节字符即可
   select name from table where length(field)<>lengthb(field)

解决方案 »

  1.   

    前提是你的字段里的双字节字符必须都是汉字
    SQL> select * from aa;        ID NAME
    ---------- --------
             1 猪八戒
             1 猪八1
             1 22a
             
    1、查出字段值全部由汉字组成的记录
    select name from aa 
    where length(name)<>lengthb(name)
    and lengthb(name)/2=length(name);2、查出字段值含有非汉字字符的记录
    select name from aa 
    where length(name)=lengthb(name)
    or lengthb(name)/2!=length(name)
    /
      

  2.   

    select decode(lengthb(col)/length(col),1,'没有汉字',2,'全是汉字','部分是汉字') from tablename;
      

  3.   

    SQL> select decode(lengthb('hello')/length('hello'),1,'没有汉字',2,'全是汉字','
    部分是汉字') from dual;DECODE(L
    --------
    没有汉字SQL> select decode(lengthb('你好')/length('你好'),1,'没有汉字',2,'全是汉字','部
    分是汉字') from dual; ;DECODE(L
    --------
    全是汉字SQL> select decode(lengthb('hello你好')/length('hello你好'),1,'没有汉字',2,'全是
    汉字','部分是汉字') from dual;DECODE(LEN
    ----------
    部分是汉字
      

  4.   

    下句即可选出姓名非法的数据:
    select * from tablename where lengthb(col)/length(col)!=2;
      

  5.   

    上述语句都是在判断双字节,如果数据库是unicode的那每个字符都是双字节的怎么判断?
      

  6.   

    如果字符串有输入限制的话,也容易实现,例如如果字符串中除了汉字就是数字的话:
    where trim(translate(col,'0123456789',' '))=col 满足这个条件的就全部是汉字了
      

  7.   

    我今早上测试了一下,如果数据库是用us7ascii字符集,就会lengthb(col)=length(col).
    如果是用ZHS16GBK字符集,就可以过滤出单字节字符.
    用 ATGC与 biliky的办法其实已经判断绝大部分的非汉字了.
    但可能还会出现一些少用字符,比如※】【等.也许还会有乱码情况出现.
    感谢大家的帮助.