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), или если я делаю что-то неправильно.
какие идеи?
4 ответов
использовать
SELECT to_char(10,'9G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL
G-символ для разделителя тысяч D-десятичный разделитель
Я думаю, что ваша маска формата неверна.Пожалуйста, попробуйте эту маску формата:
SELECT to_char(10000,'99G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL
убедитесь, что вы будете использовать правильное количество ведущих " 9 " в маске формата для больших чисел
Я решил проблему с помощью:
SELECT TO_CHAR(1000000000,'999G999G999G999D99','NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
для форматирования числа миллиардами. Думаю, это помогает.
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) из dual;
1,000.00
выберите EX_number_format (1859684500) из dual;
1,859,684,500.00