查询姓名 ---- 长度为4个字节以上,不出现除“c”之外的字母、除“+”之外的其他符号或者数字。

解决方案 »

  1.   

    1。一般写法
    select * from your_table t where length(t.name)> 4
    and t.name not like '%c%'and t.name not like '%C%'
    and t.name not like '%+%';
    2。正则写法
    select * from your_table t where length(t.name)> 4
    and not regexp_like(name, '[cC+]');另这个问题不像是真正应用中的问题。
      

  2.   

    还是用not like 用正则好像是索引失效
      

  3.   

    select * from table where length(translate(col,'c+'||col,'c+'))=length(col)
      

  4.   

    是4个字节。 oracle 3个字节代表一个汉字。 像1楼那样写的话,如果名字是1个字的话。是查不出来的。
      

  5.   

    如果用length(col) > 4 或者 lengthb(col) > 4 是满足不了需求的。 因为不是只要查四个字的名字,一个字的名字也算不对的。
      

  6.   

    谁告诉你oracle中一个汉字占三个字节?
    字母占一个字节 汉字占两个字节把
    select lengthb('nihao')as l1,lengthb('你好')as l2 from dual 
    结果是 5  4
      

  7.   

    为啥在汉字是占2个还是3个字节长度上纠结??!!
    如果编码是GBK的,就占2个字节 ; 是UTF8的,就占3个字节,自己去DB查下就好了
    SELECT *
      FROM v$nls_parameters
     WHERE parameter = 'NLS_CHARACTERSET';
      

  8.   

    也可以不出现字母啊
    关于字符集的问题 确实是 我的数据库中是gbk的
    想改为utf-8测试一下的 但是一直没改成 
      

  9.   

    呵呵,请大家看清楚题目哦。 我是求助 “查询姓名 ---- 长度为4个字节以上,不出现除“c”之外的字母、除“+”之外的其他符号或者数字。” 这句话用sql语句怎么写。 
    有谁会写吗?  谢谢大家。