2014-08-28 3 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

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

2

Это может также использоваться, так как десятичная нотация уже известно, для Франции

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

, если значение, переданное в первом аргументе, равно 0, тогда выход идет как '.00'. Начальный ноль отсутствует. Любое исправление для этого? –

Смежные вопросы