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.”。