Oracle - 格式号,带有fullstop,千位和逗号,小数

Mis*_*e83 3 sql oracle number-formatting

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

3.225,69
Run Code Online (Sandbox Code Playgroud)

简单地说,我需要完全停止将千位和逗号分开来分隔小数:

3,69 -> 3,69 
1000 -> 1.000 
1500,20 -> 1.500,20
1 -> 1 (not 1,000)
Run Code Online (Sandbox Code Playgroud)

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

我是我的DB列,逗号表示小数.

Ale*_*ole 9

您可以使用FM 格式修饰符将尾随的十进制零消隐:

select to_char(1, 'FM9G999G999D999', 'NLS_NUMERIC_CHARACTERS='',.''') from dual;

TO_CHAR(1,'FM9G999G999D999','NLS_NUMERIC_CHARACTERS='',.''')
------------------------------------------------------------
1,      
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的那样,留下十进制字符; 你可以修剪它:

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            
Run Code Online (Sandbox Code Playgroud)

我使用可选的第三个NLS参数to_char()功能,从我的会话设置独立设置的G和d字符.

如果你想保留小数分隔符的零,只需9D进入之前的最后一个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           
Run Code Online (Sandbox Code Playgroud)