【问题标题】:SQL Server 2008 thousands separator for a column列的 SQL Server 2008 千位分隔符
【发布时间】:2012-12-13 10:01:24
【问题描述】:

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

我希望它显示带有千位分隔符的数字,所以当我

select TotalArea from table

向我展示1,234.00 之类的格式。

我怎么能这样做?谢谢!

【问题讨论】:

标签: sql sql-server database sql-server-2008 tsql


【解决方案1】:

试试这个方法:

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 因为它是正确的,但请不要这样做。 @MattWhitfield 绝对做到了。
  • 仅当您的号码转换为货币类型时才执行此操作。 @dasiimwe 有更好的答案。浮点值会出错
  • 浮点值可以很好地转换,如果您坚持使用 SQL Server 2008,那么这可能是最佳选择。 declare @f float = 12345.67890; SELECT CONVERT(varchar, CAST(@f AS Money), 1)
【解决方案2】:
SELECT FORMAT(12345,'#,0.00');

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

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

【讨论】:

  • 这是最好的答案——SELECT FORMAT(2222222222222222222222222,'#,0.00')
  • 仅从 SQL Server 2012 开始支持。 social.msdn.microsoft.com/Forums/sqlserver/en-US/…
  • 谢谢,很有帮助
  • 简单、优雅、正确。这应该是公认的答案
  • FORMAT 的 MS 文档说“此功能无法远程,因为它取决于 CLR 的存在。” “远程”这样的功能到底是什么意思?
【解决方案3】:

显示数字的格式应该在显示层中完成,而不是在数据库中。因此,无论最终在何种应用程序中使用此数据,都应在此处对其进行格式化。遗憾的是,Management Studio 在这方面没有提供太多控制。

【讨论】:

  • 如果您想要标准化的 XML 数据格式怎么办?我在数据库中管理格式标准,这会传播到所有客户端,无论是网络、移动设备等。顺便说一句,FORMAT(number,'#,0') 给你分隔符,不知道为什么有人会使用 replace(convert(转变()))????在我看来,做 1M+ 记录时效率不高...
  • @ArvinAmir - 我认为 XML 的格式只有人类才需要 - 无论它是否有一堆空白,计算机都会消耗它。所以我想说这种格式仍然应该在显示时完成。
  • 如果我直接查询数据库,例如在 SSMS 中使用查询表,显示层与数据库层是一起的,因此要求人类可读的格式是完全合法的。跨度>
  • @MassimilianoKraus - 使用 SSMS 作为显示层并不是真正的“合法”。权宜之计?当然。长期解决方案?见鬼。
  • @MattWhitfield “不是真的‘合法’”?报告服务呢?显然,这取决于您正在开发的应用程序:我不喜欢将关系数据库用于表和 FK(我讨厌 SP、函数、触发器等),但如果您没有多层应用程序,而您只想使用 SSMS 来处理您的数据......好吧,那很好
【解决方案4】:

我知道问题是针对 sql server 2008 但如果您有 sql server 2012+,则可以使用如下格式:

SELECT FORMAT(12345.5634, 2);

参考:https://www.w3schools.com/sql/func_mysql_format.asp

【讨论】:

  • 这里是 Microsoft Docs for T-SQL 的 FORMAT 函数的链接:docs.microsoft.com/sql/t-sql/functions/format-transact-sql。上面的链接是 MySQL 的。
  • 这给出了一个错误:Msg 8116, Level 16, State 1, Line 131 Argument data type int is invalid for argument 2 of format function. 大概你在回答一个不同的问题 :) 这个是关于 SQL Server 的。
猜你喜欢
  • 2016-10-09
  • 2013-12-11
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2010-10-27
相关资源
最近更新 更多