Oracle SQL - изменение десятичной точки для запятой

Я нахожусь в Бразилии, и наш формат валюты - это что-то вроде "R $9,999,00".

Я пытаюсь выбрать поле и изменить формат возврата. Однако, похоже, я не могу этого сделать. Я пробовал:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';

и

SELECT to_char(10,'9,999.00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL

Никто из них не работал. Не уверен, может ли это быть мой клиент (я на Ubuntu, используя sqldeveloper), или если я что-то делаю неправильно.

Любые идеи?

Ответ 1

Использование

SELECT to_char(10,'9G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL

G - символ разделителя тысяч D для десятичного разделителя

Ответ 2

Я думаю, что ваша маска формата неверна. Попробуйте эту маску формата:

SELECT to_char(10000,'99G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL

убедитесь, что вы будете использовать правильное количество ведущих "9" в маске формата для больших чисел

Ответ 3

Я решил проблему:

SELECT TO_CHAR(1000000000,'999G999G999G999D99','NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

для форматирования числа на миллиарды. Я думаю, что это помогает.

Ответ 4

CREATE OR REPLACE FUNCTION APPS.EX_number_format( ff number) RETURN char IS

xx varchar2(100);
yy varchar2(1);
tt varchar2(100);
x number:=0;
begin
xx:=to_char(ff,'99G990G990G990G990G990D00');
for i  in 1..length(xx) loop
yy:=substr(xx,i,1);
if yy in ('1','2','3','4','5','6','7','8','9') then
x:=i;
exit;
end if;
end loop;

tt:=substr(xx,x,length(xx));
return tt;

END EX_number_format;

выберите EX_number_format (1000) из двойного;

1,000.00

выберите EX_number_format (1859684500) из двойного;

1,859,684,500.00