2012-12-13 45 views
14

我有一个名为TotalArea的列,其格式为numeric (12,2)SQL Server 2008千列分隔符

我希望它用千分显示的数字,所以当我

select TotalArea from table 

给我看像1,234.00的格式。

我该怎么做?谢谢!

+0

可能的重复[如何在T-SQL中用逗号格式化数字?](https://stackoverflow.com/questions/4377352/how-doi-i- format-a-number-with-commas-in-t-sql) –

回答

26

试试这个方法:

select replace(convert(varchar,convert(Money, TotalArea),1),'.00','') 
from table 

SELECT CAST(CONVERT(varchar, CAST(123456 AS Money), 1) AS varchar) 
from table 
+1

+1 beca使用它是正确的,但请不要这样做。 @MattWhitfield有绝对的钉子。 – tomfanning

+1

只有在您的号码投入金钱类型时才能执行此操作。 @dasiimwe有更好的答案。浮点值将错误 – Dave

+0

浮点值转换正常,如果你坚持使用SQL Server 2008,那么这可能是最好的选择。 'declare @f float = 12345.67890; SELECT CONVERT(varchar,CAST(@f AS Money),1)' – Rob

18

显示格式的数字是什么,应该在显示层来完成,而不是在数据库中。所以,在任何应用程序中,这些数据最终都会被使用,您应该在那里格式化它。不幸的是,管理工作室在这方面没有提供太多的控制。

+0

如果你想要标准化的XML数据格式化呢?我管理数据库中的格式标准,并传播到所有的客户端,无论是网络,手机等。而BTW,格式(数字,'#,0')给你分隔符,不知道为什么有人会使用替换(转换(兑换()))????在我看来,在做1M +记录时效率不高...... –

+0

@ArvinAmir - 我认为XML的格式化只对人类有用 - 计算机不管它是否有一堆空白,都会使用它。所以我会说这种格式化仍然应该在显示的时候完成。 –

-1

试试这个一个很棒的例子。

SELECT CAST(CONVERT(VARCHAR,CAST(123456金钱),1)为varchar)

+1

与Parado的答案几乎相同,近一年后 - ***重复答案*** – Kiquenet

14
SELECT FORMAT(12345,'#,0.00'); 

SELECT FORMAT(TotalArea,'#,0.00') from table; 

参考: https://msdn.microsoft.com/en-us/library/ee634206(v=sql.105).aspx

+0

这是最好的答案,因为这可行 - SELECT FORMAT(2222222222222222222222222,'#,0.00') – Dave

+0

仅支持从SQL Server 2012开始。 https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b4090663-6805-46f5-b84f-81e5eb90da30/format-works-in-2012-but-not-in-2008-what-am-我失踪?论坛= transactsql –

+0

谢谢,非常有帮助 –

0

使用这个简单的.... 格式(CHART_OF_ITEM。 UNIT_PRIC_W_TAX,'#,0.00')AS UNIT_PRICE_W_TAX