gpt4 book ai didi

sql - Oracle - 用句号表示千位,用逗号表示小数点

转载 作者:行者123 更新时间:2023-12-04 07:45:15 24 4
gpt4 key购买 nike

我有一个像 3225,69 这样的数字,我想将显示转换为:

3.225,69

简单地说,我需要句号来分隔千位和逗号来分隔小数:
3,69 -> 3,69 
1000 -> 1.000
1500,20 -> 1.500,20
1 -> 1 (not 1,000)

我应该在 to_char 中使用哪个掩码?

我是我的数据库列,逗号表示小数。

最佳答案

您可以使用 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

我正在将可选的第三个 NLS 参数用于 the to_char() function独立于我的 session 设置设置 G 和 D 字符。

如果要保留小数点分隔符之前的零,只需制作最后一个 9之前 D0 :
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

关于sql - Oracle - 用句号表示千位,用逗号表示小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28152970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com