请问 如何将一个金额,格式化为 "±999999999999999.999“ 这种格式
比如: 12345.5
格式化为+00000000012345.500位数不够前面补0, 另外正数前面有+ 号  负数前面 - 号

解决方案 »

  1.   

    函数可以解决 
    单句sql也可以 就是太麻烦了
    不知道有没有更好的方法
      

  2.   

    create or replace function f1(p1 varchar2) return varchar2 is
    a char(1);
    b varchar2(20);
    c varchar2(20);
    d varchar2(20);
    begin
    a :=substr(p1,0,1);
    if (a = '-' or a = '+' ) then
    b :=substr(p1,2,instr(p1,'.',2,1)-2);
    c := lpad(b,15,'0');
    d := rpad(substr(p1,instr(p1,'.',1,1)+1),3,'0');
    else
    a := '+';
    b :=substr(p1,0,instr(p1,'.',1,1)-1);
    c := lpad(b,15,'0');
    d := rpad(substr(p1,instr(p1,'.',1,1)+1),3,'0');
    end if;
    return a || c || '.' || d;
    end;
    /
      

  3.   

    SQL> declare
      2  aa varchar2(20);
      3  begin
      4  aa :=f1('12345.5');
      5  dbms_output.put_line(aa);
      6  end;
      7  /
     
    +000000000012345.500
     
    PL/SQL procedure successfully completed
      

  4.   

    --直接to_char是可以的
    select to_char(12345.5,'S000000000000000.000') from dual;