2011-09-06 41 views
0

我在我的表中显示一个数量的列。数量从一列变到另一列,它们超过15位数。格式小数和逗号到检索的数字

格式化数字以显示逗号和小数点的最佳方法是什么?

我的查询是

select amount from ccamounts 

我如何格式化数字

205511892078 

显示为

205,511,892,078 

,如果有一个小数点也会出现。

回答

1

我会格式化数字在UI /报告工具/表示层不是Oracle

,但如果你必须在Oracle尝试格式化:

SELECT 
    CASE WHEN INSTR(TO_CHAR(205511892078),'.')>0 THEN 
     TO_CHAR(205511892078 ,'999,999,999,999.99') 
    ELSE 
     TO_CHAR(205511892078 ,'999,999,999,999') 
    END   
FROM DUAL 

这将返回的数量作为一个字符串。

1

我相信你可以使用TO_CHAR来做到这一点,问题是这只是SQL中的格式化函数。它要求您的号码始终采用相同的格式。

考虑你上面的例子可以做

TO_CHAR(“205511892078”,“999,999,999,999”)

,这将格式化数字作为您指定,用一个小数位这可以藏汉做,但小数需要指定:

TO_CHAR( '20551189207842', '999,999,999,999.99')

这将使你205,511,892,078.42

我认为如果字段长度会发生变化,sql将忽略任何不适合格式字符串的内容(这是一个掩码)。也许你想考虑在这种情况下在你可能使用的任何前端格式化数字?

-1
declare @d3 decimal (10, 2) 

set @d3 = 12309809.5494 

SELECT convert(varchar(15),cast(CAST(ROUND(@d3,2,1) AS DECIMAL (30,2)) as money),1) as Value 

SELECT CAST(ROUND(convert(varchar(30), cast(@d3 as money),2),2,1) AS DECIMAL (30,2)) as Value 

输出:

12,309,809.55

12309809.55

+1

这个问题被标记为Oracle和你所写的将无法在甲骨文工作。它看起来像MS SQL。这对格式化或类型转换问题来说特别没有帮助,因为它们如此不同。 –