2012-10-19 100 views
11

我在巴西,我們的貨幣格式類似'R $ 9.999,00'。Oracle SQL - 逗號更改小數點

我想選擇一個字段,並更改返回的格式。但是,似乎我做不到。我已經試過:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.'; 

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

沒有這些工作的。不知道它是否可能是我的客戶端(我在Ubuntu上使用sqldeveloper),或者如果我做錯了什麼。

任何想法?

回答

16

使用

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

G是符號千位分隔符 d是小數點分隔

+2

:如果數字增加到8位數,那麼這將如何迎合? –

+0

謝謝!兩個答案都是正確的! –

+0

結果爲零時中斷。錯誤 –

3

我認爲你的格式掩碼是wrong.Please試試這個格式掩碼:

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

請務必在格式掩碼中使用正確數量的前導'9'以獲得更大的數字

+0

如果偶數結果爲零,則此功能可用。這是正確的答案。 –

1

我所解決的問題:

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

格式化數數十億。我認爲它有幫助。

+0

謝謝奧馬爾的更正。 – ddsultan

-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

+0

只需通過[如何在StackOverflow上回答](http://stackoverflow.com/help/how-to-answer),而不是直接編寫SQL作爲答案。 – LuFFy

相關問題