没有。如果是在pl/sql ,使用to_char() ,非法的可以触发exception

解决方案 »

  1.   

    那有点惨,我想在SELECT中取某一字段的值,如果它不是数字(空,''或者字母)的话就返回0,数字的话就返回本值,我不想触发那个EXCEPTION,有没有什么简单的方法?
      

  2.   

    可以这样做
    ucase(fieldname)=lcase(fieldname)
    这样就能得到是数字了,
    如果不等就说明里面不仅仅有数字
    就不能转换
      

  3.   

    没有
    不行就用ascii码
      

  4.   

    用ASCII来判断,数字的大小写是相等的,字符就不等:
      

  5.   

    我这样写执行的时候还是报错说无效的数字,
    SELECT TO_NUMBER(decode(decode(lower(N4),upper(N4),1,0),1,N4,0)) FROM TABLE
    其中N4是我的字段名,哪位大侠帮写一个,十分感谢,比较急!!
      

  6.   

    你上面的代码问题呀?!
    =======================================================================
    SQL> SELECT TO_NUMBER(decode(decode(lower(sal),upper(sal),1,0),1,sal,0)) FROM my
    emp;TO_NUMBER(DECODE(DECODE(LOWER(SAL),UPPER(SAL),1,0),1,SAL,0))
    ------------------------------------------------------------
                                                               1
                                                               2
                                                               3
                                                               4
                                                               5
                                                               6
                                                               4
                                                               5
                                                               6
                                                              11
                                                              11TO_NUMBER(DECODE(DECODE(LOWER(SAL),UPPER(SAL),1,0),1,SAL,0))
    ------------------------------------------------------------
                                                               0
                                                               0
                                                               0已选择14行。已用时间:  00: 00: 00.00
    SQL> select sal from myemp;SAL
    ----------
    1
    2
    3
    4
    5
    6
    4
    5
    6
    11
    11SAL
    ----------
    a6
    6b
    a6已选择14行。已用时间:  00: 00: 00.00
    =======================================================================
      

  7.   

    那加上这两种情况判断的话是不是语句写的就很复杂,我们老大非要我用存存储过程实现,哪位能写一个IS_NUMBER之类的方法让我调用一下就OK?
    同时非常感谢楼上做的测试!!
      

  8.   

    可能是“可能是我的数据库中有空值”,那就家NVL函数:
       SELECT TO_NUMBER(decode(decode(lower(nvl(sal,0)),upper(nvl(sal,0)),1,0),1,nvl(sal,0),0)) 
       FROM myemp;
      

  9.   

    谢谢lianhg,不过觉得那样也太了
    刚刚写了一个函数,这样就省事多了,结帐了
    create or replace function PARSE_NUMBER
    (VAR_VALUE IN VARCHAR)
     return NUMBER is
      Result NUMBER;
    begin
        Result := TO_NUMBER(VAR_VALUE);
        return Result;
        EXCEPTION WHEN others THEN
        begin
            return 0;
        end;
    end PARSE_NUMBER;