您可以使用遮罩来关闭,如
'FM999999990D9999',在小数点的每边各加9s,以覆盖您可能拥有的所有值。
with tab1 (cola) as ( select 0.87 from dual union select 661 from dual union select 661.87 res from dual union select 1.5 res from dual)select cola, to_char(cola, 'FM999999990D9999')from tab1; COLA TO_CHAr(COLA,'F---------- --------------- .87 0.87 1.5 1.5 661 661. 661.87 661.87
在
FM移除了尾随零以及开头的空格(包括一个+/-号的标称空间)。
为了摆脱尾随的十进制标记,您还需要将其修剪掉:
with tab1 (cola) as ( select 0.87 from dual union select 661 from dual union select 661.87 res from dual union select 1.5 res from dual)select cola, rtrim(to_char(cola, 'FM999999990D9999'), to_char(0, 'FMD'))from tab1;
我
D在这两个方面都坚持了下来;您可以
.在两者中都使用固定值,因此不需要第二个
to_char()调用来转换它,但是您可能希望它由会话控制-
无论哪种方式都需要保持一致。
如果您不知道需要包含多少个9,则可以根据小数点分隔符前后的位数生成每个数字的定制格式掩码:
with tab1 (cola) as ( select 0.87 from dual union all select 661 from dual union all select 661.87 res from dual union all select 1.5 res from dual union all select 0.00045354543 from dual)select cola, 'FM' || lpad('0', length(trunc(cola)), '9') || case when trunc(cola) != cola then 'D' || rpad('9', length(cola - trunc(cola)) - 1, '9') end as format_mask, to_char(cola, 'FM' || lpad('0', length(trunc(cola)), '9') || case when trunc(cola) != cola then 'D' || rpad('9', length(cola - trunc(cola)) - 1, '9') end) as resultfrom tab1;COLA FORMAT_MASK RESULT --------------- -------------------- -------------------- .87 FM0D99 0.87 661 FM990 661 661.87 FM990D99 661.87 1.5 FM0D9 1.5 .00045354543 FM0D99999999999 0.00045354543这依赖于隐式转换,但似乎适用于正数,负数和零。不需要修剪结果,因为对于非整数,只包含小数点分隔符D。



