4

目标

在简洁的语句中将结果格式化COUNT为通用格式(例如###,##0),并且不使用 UDF。

我试过了

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

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

我选择这个方向的原因是因为它是我在阅读MSDN的CAST 和 CONVERT文档时能找到的唯一标准格式选项。

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

研究和限制

当然,您可以构建一个用户定义的函数,就像这个博客上的这个函数一样,但是我有一个限制,使我无法为此目的构建 UDF。

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

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

4

2 回答 2

9

即使问题作者被困在 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

(ETC。)

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

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

示例输出

53234567.89
于 2017-01-24T08:05:36.567 回答
8

不是最优雅的,但您可以使用替换删除尾随的 .00。

SELECT REPLACE(CONVERT(VARCHAR, CAST(COUNT([id]) AS MONEY), 1), '.00', '')
FROM tbl
于 2013-08-15T18:36:57.977 回答