select DECODE(TRUNC(round(decode(1, 0, 0, 1 / 1000 * 100), 1)),
0,
REPLACE(round(decode(1, 0, 0, 1 / 1000 * 100), 1),
'.',
'0.'),
TO_CHAR(round(decode(1, 0, 0, 1 / 1000 * 100), 1))) || '%' from dual
第一:用TRUNC獲取小數點前面的數值。
第二:用decode函數做if或者else操作。
第三:如果遇到只是小數點的則替換成“0.”。