SQL Server 2008 列的千位分隔符

35

我有一个名为TotalArea的列,格式为numeric (12,2)

我希望它能显示千位分隔符,以便当我

select TotalArea from table

请给我展示一个类似于 1,234.00 的格式。

我该怎么做?谢谢!


可能是如何在T-SQL中使用逗号格式化数字?的重复问题。 - underscore_d
4个回答

53

2
这是最佳答案,因为它可以正常工作 -- SELECT FORMAT(2222222222222222222222222,'#,0.00') - Dave
3
只支持从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-i-missing?forum=transactsql - Saravanan Sachi
非常感谢,非常有帮助。 - Asif Ghanchi
1
简单、优雅、正确。这应该是被接受的答案。 - Reversed Engineer
FORMAT 的 MS 文档中提到:“由于它依赖于 CLR 的存在,因此无法远程调用此函数。” 那么像这样“远程调用”一个函数到底是什么意思呢? - Reversed Engineer

49

试试这种方式:

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因为它是正确的,但请不要这样做。@MattWhitfield完全掌握了它。 - tomfanning
1
只有在你的数字可以转换为货币类型时才这样做。@dasiimwe 给出了更好的答案。浮点数将导致错误。 - Dave
1
浮点值转换很好,如果你被困在SQL Server 2008中,那么这可能是最好的选择。 declare @f float = 12345.67890; SELECT CONVERT(varchar, CAST(@f AS Money), 1) - Rob

21

将数字进行格式化以供显示是应该在显示层而非数据库中完成的。因此,在任何使用这些数据的应用程序中,您都应该在那里进行格式化。不幸的是,管理工具在这方面并没有提供太多的控制。


如果您想要标准化的XML数据格式怎么办?我在数据库中管理格式化标准,这将传播到所有客户端,无论是Web、移动等。另外,FORMAT(number,'#,0')可以给您提供分隔符,不确定为什么有人会使用replace(convert(convert()))???在处理100万条以上记录时,在我看来效率不高... - Vinnie Amir
@ArvinAmir - 我认为XML的格式化只对人类有必要 - 计算机无论其中是否有大量空格,都可以消耗它。因此,我认为这种格式化仍应在显示点完成。 - Matt Whitfield
1
如果我直接查询数据库,例如使用SSMS中的查询表格,显示层与数据库层一起出现,因此要求以人类可读格式显示非常合理。 - Massimiliano Kraus
1
@MassimilianoKraus - 使用SSMS作为显示层并不是真正的“合法”。作为一种权宜之计?可以。长期解决方案?绝对不行。 - Matt Whitfield
@MattWhitfield “不是真正的‘合法’”?那报告服务呢?显然,这取决于您正在开发的应用程序:我不喜欢仅使用关系数据库来处理表和FK(我讨厌SP、函数、触发器等),但如果您没有多层应用程序,并且只想使用SSMS来处理数据...那就没问题。 - Massimiliano Kraus
@MassimilianoKraus - 我必须尊重地不同意,数据库不是应用程序,SSMS也不是最终用户的查询工具。报告服务在格式控制方面提供了更多的控制权。 - Matt Whitfield

3

2
这是 T-SQL 的 FORMAT 函数的 Microsoft Docs 链接:https://learn.microsoft.com/sql/t-sql/functions/format-transact-sql。上面的链接是针对 MySQL 的。 - SvenAelterman
1
这个错误是:Msg 8116,Level 16,State 1,Line 131 Argument data type int is invalid for argument 2 of format function. 可能你正在回答一个不同的问题 :) 这个问题与SQL Server有关。 - Reversed Engineer
这是针对MySQL的答案,不适用于T-SQL/MS SQL。 - Tahir Alvi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接