如:
select to_number('123') from table  正常
select to_number('a123') from table 报错。如何能过滤掉a这个字符?

解决方案 »

  1.   

    如果字符的个数和位置固定,可以先用substr()截取数字,否则用正则表达式来解决。
      

  2.   

    我没说清楚,数据库的设计是这样的:
    ID(pk varchar2(20))  ...其他字段
    ID字段为主键,并且允许英文字母,如现在有个id为'a123'。
    需要对id进行max(id),取得最大值。
    这时候当id为1...10的数字的时候,取到的id总是9,所以使用max(to_number(id))来对id进行数字转换。
    这时考虑到id中有字母的话,就会报错。 有没有类似vb中的语法Int("a123")=>123这样的语法?
      

  3.   

    select yo_number
    (Translate('a123','1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ','1234567890'))from dual结果
    123
      

  4.   

    上面打错了select 
       to_number
       (Translate('a123','1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ','1234567890'))from dual
      

  5.   


    select to_number(
    REGEXP_REPLACE('a123ch','[a-zA-Z/:.]','')
    ) from table; 用这个函数可以解决,用到正则表达式,不过这个函数10G以上才有
      

  6.   

    select 
      to_number 
      (Translate('a123','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',' ')) 
    from dual;
      

  7.   

    Select Replace('a123','a') From dual'--测试
      

  8.   

    replace 是固定字符串过滤,对于不同的没法处理的
      

  9.   

    to_number(translate(字段,字段||'0123456789','0123456789'))
      

  10.   

    to_number(translate(字段,'0123456789||'字段,'0123456789'))
    呵呵,写反了