有如下一段SQL语句:
select
nvl(a.boss_amount,0) as boss_amount,
nvl(b.check_amount,0) as check_amount,
nvl(c.checkok_amount,0) as checkok_amount
TO_CHAR(nvl(round(b.check_amount/a.boss_amount*100,2),'0.00'))||'%' as checkrate
from ......其中:a,b,c是from后面子查询的结果, 现在的问题是如果b.check_amount/a.boss_amount*100仍然小于1,其实我是想在页面显示诸如0.53%, 0.87%之类的格式,现在的问题是页面只显示.53%,.87%之类的格式,也就是小数点前面的0被剔除了,请问大家这段SQL语句应该怎么改?谢谢大家!

解决方案 »

  1.   


    SQL> select to_char(0.34, '90.99') from dual
      2  ;TO_CHA
    ------
      0.34SQL>
      

  2.   

    TO_CHAR(nvl(round(b.check_amount/a.boss_amount*100,2),'90.99'))||'%' as checkrate 
      

  3.   

    楼上的朋友,还是不对啊,你90.99是什么意思呢,现在的问题是b.check_amount/a.boss_amount*100等于0的话,页面也显示90.99%了
      

  4.   

    select to_char(round(b.check_amount/a.boss_amount*100,2),'90.99')||'%' from dual;
      

  5.   

    RTrim(To_Char(round(check_amount/boss_amount*100,2),'FM99999999990.9999'),'.')||'%'
      

  6.   

    select NVL(to_char(round(b.check_amount/a.boss_amount*100,2),'FM90.99'),'0.00')||'%' from dual;
    90.99或FM90.99是oracle格式化数据的格式,如果想扩大位数的话可以使用990.999... 这是oracle规定的方式
      

  7.   


    SQL> select to_char(0, '90.99') from dual;TO_CHA
    ------
      0.00SQL> select to_char(0, '90.99')||'%' from dual;TO_CHAR
    -------
      0.00%楼主尝试一下再说,不可能出现90.99%
      

  8.   


    6楼robinhood1214的解决方式是我想要的结果,同时也谢谢大家都热情回复!