有一张YHXX的表,里面账号这一列名里,因为以前输入的账号都是用英文表示,后期输入的账号用数字表示,我就是想用一条SQL语句找出这个账号列名里,所有是数字的字段或者所有是英文的字段,这个应该怎么写,数据库是ORACLE的

解决方案 »

  1.   

    正则表达式即可
    select * from yhxxwhere regexp_like('zhanghao','^[A-Za-z]+$');  全英文
    select * from yhxxwhere regexp_like('zhanghao','^[A-Za-z0-9]+$'); 英文数字select * from yhxxwhere regexp_like('zhanghao','^[0-9]+$'); 全数字
      

  2.   


    --假设的你的帐号的要么全是英文,要么全是数字
    --帐号中没有英文字母的记录
    select * from yhxx where upper(字段)=lower(字段)
    --账号中只有英文字母的记录
    select * from yhxx where upper(字段)<>lower(字段)
      

  3.   

    这个语句对我没用,不知道是否是因为我的ORACLE 是9I的关系,是不是正则表达式需要ORACLE 10G的
      

  4.   


    我觉得,你是不是where前面没有空格,我写漏了
      

  5.   


    好还有就是'zhanghao',应该是表字段,不要单引号,我是用string测试的
      

  6.   

    真的已经按你给的语句写了,一点都没有错,就是报错,ORA-00920 无效的关系运算符
      

  7.   


    upper是将字符串转为大写,lower是将字符串装为小写
    upper('aA')='AA'
    lower('aA')='aa'
    所以如果一个字符串里有字母,upper和lower后的结果肯定不一样
    upper('00')='00'
    lower('00')='00'
    如果一个字符串都是数字,upper('00')=lower('00')