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

Mik*_*oud 3 sql t-sql sql-server sql-server-2008

目标

COUNT结果格式化为通用格式(例如###,##0)在简明语句中并且没有UDF.

我试过了

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

SELECT CONVERT(VARCHAR, CAST(COUNT([id]) AS MONEY), 1) FROM tbl
Run Code Online (Sandbox Code Playgroud)

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

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

研究和限制

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

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

我也知道这个解决方案:在SQL Server 2008 R2中用逗号格式化数字但没有小数?

Chr*_*uez 7

不是最优雅,但你可以删除尾随.00与替换.

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

  • +1,我最初的想法是使用`LEFT(zzz,len(zzz)-3)`,但是接缝更好 (2认同)

Lar*_*sen 5

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

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

SELECT FORMAT(COUNT([id]), N'N0')
FROM [tbl]
Run Code Online (Sandbox Code Playgroud)

示例输出

53,234,568
Run Code Online (Sandbox Code Playgroud)

小数点后一位数

SELECT FORMAT(COUNT([id]), N'N1')
FROM [tbl]
Run Code Online (Sandbox Code Playgroud)

示例输出

53,234,567.9
Run Code Online (Sandbox Code Playgroud)

小数点后两位数

SELECT FORMAT(COUNT([id]), N'N2')
FROM [tbl]
Run Code Online (Sandbox Code Playgroud)

示例输出

53,234,567.89
Run Code Online (Sandbox Code Playgroud)

(等等.)

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

SELECT FORMAT(COUNT([id]), N'#.00')
FROM [tbl]
Run Code Online (Sandbox Code Playgroud)

示例输出

53234567.89
Run Code Online (Sandbox Code Playgroud)