6

我在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

3 回答 3

7

如果您想在查询中执行此操作:

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

Gives $10'000.00(因为这个字符串正在被预处理,所以字符周围有一对引号(变成单引号),然后要在字符串中得到一个单引号,你需要四个引号才能变成一个!)

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

$10 000,00

于 2014-08-28T09:41:33.460 回答
3

这也可以使用,因为法国国家已经知道十进制表示法

SELECT TO_CHAR(1000000000,'999,999,999,999.99') "Amount"  FROM DUAL;
于 2015-10-20T10:35:03.460 回答
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
于 2014-08-28T09:40:06.643 回答