15

我在巴西,我们的货币格式类似于“R$ 9.999,00”。

我正在尝试选择一个字段,并更改返回的格式。不过,我好像做不到。我试过了:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';

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

这些都没有奏效。不确定它是否可能是我的客户(我在使用 sqldeveloper 的 Ubuntu 上),或者我做错了什么。

有任何想法吗?

4

4 回答 4

22

采用

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

G 是千位分隔符的符号 D 是小数分隔符

于 2012-10-19T13:15:27.840 回答
4

我认为你的格式掩码是错误的。请试试这个格式掩码:

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

确保您将在格式掩码中使用正确数量的前导“9”以获得更大的数字

于 2012-10-19T13:16:14.280 回答
3

我通过以下方式解决了这个问题:

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

以十亿为单位格式化一个数字。我认为它有帮助。

于 2014-01-28T11:46:12.047 回答
-1
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

于 2017-03-14T10:48:41.147 回答