如一个字符串:ABCE34ER9,
用sql语句,我怎么去知道有多少个数字呢?(上面例子3个)
非常感谢!

解决方案 »

  1.   

    select count(1)
    from
    (
      select ascii(substr('ABCE34ER9',rownum,1)) a
      from dual connect by  rownum<=length('ABCE34ER9')
    ) where a between 48 and 57--result:
    3
      

  2.   

    考虑通用,写了一函数:--FUNCTION:
    /*
    功能:判断字符串中数字个数
    作者:cosio
    时间: 2009-10-15
    */
    CREATE OR REPLACE FUNCTION fun_test(a IN varchar) 
    RETURN NUMBER 
    IS 
      b NUMBER; 
    BEGIN 
      SELECT COUNT(*) INTO b
      FROM
      (SELECT ascii(substr(a,rownum,1)) a
      FROM dual CONNECT BY  rownum<=length(a))
      WHERE a BETWEEN 48 AND 57; 
      RETURN(b); 
    End;--TEST DATA:
    with temp 
    as
    (
    select '1231aasb' t from dual
    union all
    select 'dasf131412341' from dual
    )
    select fun_test(t) from temp;--RESULT:
    4
    9
      

  3.   

    在函数里写个for循环,遍历每个字符,跟'0'和'1'比较,效率会更高吧
      

  4.   

    select length('luoyoumou11luo2093lllieoje') "字串长度",
           length(translate('luoyoumou11luo2093lllieoje','0123456789',' ')) "字符个数",
           length('luoyoumou11luo2093lllieoje')-length(translate('luoyoumou11luo2093lllieoje','0123456789',' ')) "数字个数"
    from dual;
      

  5.   

    用正则表达式加LENGTH不就行了
      

  6.   

    对了
    translate函数
    不过要改一下,否则这个式中0不会统计出来
    select length('luoyoumou11luo2093lllieoje') "字串长度",
           length(translate('luoyoumou11luo2093lllieoje',' 0123456789',' ')) "字符个数",
           length('luoyoumou11luo2093lllieoje')-length(translate('luoyoumou11luo2093lllieoje',' 0123456789',' ')) "数字个数"
    from dual;
    ' 0123456789'的0前加上空格
    ok
      

  7.   

    --这样子处理也不错:
    select length(translate(upper('12341QWERQWREQWREQWER'),upper('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),' '))
    from dual;
      

  8.   

    select length('luoyoumou11luo2093lllieoje') "字串长度",
           length(translate('luoyoumou11luo2093lllieoje','0123456789',' '))-1 "字符个数",
           length('luoyoumou11luo2093lllieoje')-length(translate('luoyoumou11luo2093lllieoje','0123456789',' '))+1 "数字个数"
    from dual;
      

  9.   

    如 wildwave所说,A前要加空格:
    select length(translate(upper('12341QWERQWREQWREQWER'),upper(' ABCDEFGHIJKLMNOPQRSTUVWXYZ'),' ')) 
    from dual; 
      

  10.   

    select 'ABCE34ER9' "原字串",
           length('ABCE34ER9') "字串长度",
           length(translate('ABCE34ER9',' 0123456789',' ')) "字符个数",
           length('ABCE34ER9')-length(translate('ABCE34ER9',' 0123456789',' ')) "数字个数"
    from dual;
      

  11.   

    select translate('luoyoumou11luo2093lllieoje','a0123456789','a') a, length('luoyoumou11luo2093lllieoje') "字串长度",
           length(translate('luoyoumou11luo2093lllieoje','a0123456789','a')) "字符个数",
           length('luoyoumou11luo2093lllieoje')-length(translate('luoyoumou11luo2093lllieoje','0123456789',' ')) "数字个数"
    from dual;