您可以使用 FM format modifier 将尾随的十进制零清除:
select to_char(1, 'FM9G999G999D999', 'NLS_NUMERIC_CHARACTERS='',.''') from dual;
TO_CHAR(1,'FM9G999G999D999','NLS_NUMERIC_CHARACTERS='',.''')
------------------------------------------------------------
1,
但正如你所见,它留下了十进制字符;你可以把它剪掉:
with t as (
select 3.69 as n from dual
union all select 1000 from dual
union all select 150.20 from dual
union all select 1 from dual
union all select 0.16 from dual
)
select n,
to_char(n, '9G999G999D000') original,
to_char(n, 'FM9G999G999D999', 'NLS_NUMERIC_CHARACTERS='',.''') new,
rtrim(to_char(n, 'FM9G999G999D999', 'NLS_NUMERIC_CHARACTERS='',.'''),
',') as trimmed
from t;
N ORIGINAL NEW TRIMMED
---------- -------------- -------------- --------------
3.69 3.690 3,69 3,69
1000 1,000.000 1.000, 1.000
150.2 150.200 150,2 150,2
1 1.000 1, 1
.16 .160 ,16 ,16
我正在使用the to_char() function 的可选第三个 NLS 参数来独立于我的会话设置来设置 G 和 D 字符。
如果您想保留小数点分隔符前的零,只需将D 之前的最后一个9 变成0:
with t as (
select 3.69 as n from dual
union all select 1000 from dual
union all select 150.20 from dual
union all select 1 from dual
union all select 0.16 from dual
)
select n,
to_char(n, '9G99G990D000') original,
to_char(n, 'FM9G999G990D999', 'NLS_NUMERIC_CHARACTERS='',.''') new,
rtrim(to_char(n, 'FM9G999G990D999', 'NLS_NUMERIC_CHARACTERS='',.'''),
',') as trimmed
from t;
N ORIGINAL NEW TRIMMED
---------- ------------- -------------- --------------
3.69 3.690 3,69 3,69
1000 1,000.000 1.000, 1.000
150.2 150.200 150,2 150,2
1 1.000 1, 1
.16 0.160 0,16 0,16