字段:dd varchar2(4)
表:t_sss
实现功能:dd字段是varchar2类型的值为:0,1,2(不包含字母),要求是如果dd是0就直接是零,如果大于0实现减一操作。

解决方案 »

  1.   

    select dd,decode(to_number(dd),0,0,to_number(dd)-1) from yourTable;
      

  2.   


    SQL> CREATE TABLE TT(DD VARCHAR2(4));Table createdSQL> INSERT INTO TT VALUES(0);1 row insertedSQL> INSERT INTO TT VALUES(2);1 row insertedSQL> INSERT INTO TT VALUES(5);1 row insertedSQL> INSERT INTO TT VALUES(3);1 row insertedSQL> SELECT * FROM TT;DD
    ----
    0
    2
    5
    3SQL> SELECT DECODE(DD,0,0,DD-1) FROM TT;DECODE(DD,0,0,DD-1)
    -------------------
                      0
                      1
                      4
                      2
      

  3.   

    当运行到to_number(dd)是总是提示出错:ORA:01722 invalid number,这个问题如何解决,为什么不能转化?
      

  4.   

    尝试使用TO_NUMBER(TRIM(DD)) 呢?
      

  5.   

    SELECT case
        when to_number(REGEXP_REPLACE ('abcd123r4','[^0-9]',''))>0 then
          to_number(REGEXP_REPLACE ('abcd123r4','[^0-9]',''))-1
        else 
           0
         end  results
      FROM t_sss
      

  6.   

    SELECT case
        when to_number(REGEXP_REPLACE (dd,'[^0-9]',''))>0 then
          to_number(REGEXP_REPLACE (dd,'[^0-9]',''))-1
        else 
           0
         end  results
      FROM t_sss