使用千位分隔符格式化COUNT结果的更简洁方法?

时间:2013-08-15 18:32:13

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

目标

在简明陈述中将COUNT结果格式化为通用格式(例如###,##0),而不使用UDF。

我试过

我目前正在使用这样的东西,虽然它留下两位小数很笨重:

SELECT CONVERT(VARCHAR, CAST(COUNT([id]) AS MONEY), 1) FROM tbl

我走向那个方向的原因是因为它是我在阅读MSDN中的CAST and CONVERT文档时可以找到的唯一标准格式选项。

我真的不喜欢它,但是它很顺利,因为这些数字只是在T-SQL运行后被复制并粘贴到其他文本编辑器中。它们当然必须手动格式化以删除某些地方的小数。

研究和限制

当然你可以构建一个用户定义的函数,比如one on this blog,但我有一个限制,使我无法为此目的构建UDF。

经过一些额外的研究后,我发现如果我使用SQL 2012,我可以使用新的T-SQL FORMAT功能,唉,我只限于2008 R2。这当然利用了一个不同的平台,因为它是一个.NET接口。 :d

我也知道这个解决方案:Format a number with commas but without decimals in SQL Server 2008 R2?

2 个答案:

答案 0 :(得分:7)

不是最优雅的,但你可以删除尾随的.00 with replace。

SELECT REPLACE(CONVERT(VARCHAR, CAST(COUNT([id]) AS MONEY), 1), '.00', '')
FROM tbl

答案 1 :(得分:5)

即使问题作者仍然停留在SQL Server 2008R2上,如果您有幸使用 SQL Server 2012或更新版,这是一个简洁而有效的解决方案。

小数点后没有数字(四舍五入)

SELECT FORMAT(COUNT([id]), N'N0')
FROM [tbl]

示例输出

53,234,568

小数点后的一位数

SELECT FORMAT(COUNT([id]), N'N1')
FROM [tbl]

示例输出

53,234,567.9

小数点后的两位数

SELECT FORMAT(COUNT([id]), N'N2')
FROM [tbl]

示例输出

53,234,567.89

(等)

小数点后两位数,无千位分隔符

SELECT FORMAT(COUNT([id]), N'#.00')
FROM [tbl]

示例输出

53234567.89