2014-08-28 171 views
2

我在这里面临to_char()货币格式问题。SQL to_char货币格式化

下面的代码为我工作:

SELECT TO_CHAR(10000,'L99G999D99MI', 
       'NLS_NUMERIC_CHARACTERS = ''.,'' 
       NLS_CURRENCY = ''$''') "Amount" 
    FROM DUAL; 

这将提供给我的输出:$10,000.00
现在,我想将货币转换为法国货币,期望输出是10 000,00或瑞士货币,输出10'000.00。所以,我修改的代码如下所示为上述两种情况下:

SELECT TO_CHAR(10000,'L99G999D99MI', 
       'NLS_NUMERIC_CHARACTERS = ''"", ""'' 
       NLS_CURRENCY = ''$'' ') "Amount" 
    FROM DUAL; 


SELECT TO_CHAR(10000,'L99G999D99MI', 
       'NLS_NUMERIC_CHARACTERS = ''". "'' 
       NLS_CURRENCY = ''$'' ') "Amount" 
    FROM DUAL; 

但这代码不起作用并且示出的ORA-12702错误。代码有问题吗?

回答

4

如果你想要做的它在查询中:

SELECT TO_CHAR(10000,'L99G999D99MI', 
      'NLS_NUMERIC_CHARACTERS = ''.'''''' 
      NLS_CURRENCY = ''$'' ') "Amount" 
      FROM DUAL; 

给出$10'000.00(与此字符串越来越预处理有对周围的字符(成为单)引号,然后让字符串中的单引号需要四个报价,成为一个!)

SELECT TO_CHAR(10000,'L99G999D99MI', 
      'NLS_NUMERIC_CHARACTERS = '', '' 
      NLS_CURRENCY = ''$'' ') "Amount" 
      FROM DUAL; 

给人$10 000,00

+0

感谢您的指导! – Law 2014-08-28 09:54:33

2

作为一个选项,你可以在会话级别设置NLS_TERRITORY参数:

alter session set nls_territory='FRANCE'; 

select to_char(10000, 'fm99G999D00') as french 
    from dual; 

结果:

FRENCH 
---------- 
10 000,00 


alter session set nls_territory='SWITZERLAND'; 

select to_char(10000, 'fm99G999D00') as switzerland 
    from dual 

结果:

SWITZERLAND 
----------- 
10'000.00 
+0

谢谢你你的指导!它工作正常! – Law 2014-08-28 23:43:59

2

这可以作为很好,因为十进制数表示已经知道法国国家

SELECT TO_CHAR(1000000000,'999,999,999,999.99') "Amount" FROM DUAL; 
+0

如果在第一个参数中传递的值是0,那么输出为'.00'。前导零缺失。任何修补程序? – 2017-12-13 18:23:37