使用千位分隔符格式化 COUNT 结果的更简洁方法?
Posted
技术标签:
【中文标题】使用千位分隔符格式化 COUNT 结果的更简洁方法?【英文标题】:A more concise way to format COUNT result with thousands separator? 【发布时间】:2013-08-18 00:46:37 【问题描述】:目标
在简洁的语句中将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?
【问题讨论】:
我相信你已经意识到了这一点,我不想质疑任何有这么多代表的人,但这确实在你的所以中更容易处理应用程序,除非您绝对一心想在 SQL 查询中执行此操作 为什么不在客户端执行这种格式化,例如C# 在 Format() 和 ToString() 中有很好的功能。还有please stop declaringvarchar
without length. It's lazy and dangerous.
@LittleBobbyTables,在这种情况下我仅限于T-SQL
。正如您所说,如果我有钱的话,我会在 .NET 中执行此操作。但是,这是一个庞大的转换脚本,由于我无法控制的限制,必须在 SQL 服务器上执行。
@AaronBertrand,在这种情况下我只能使用T-SQL
。当然,我很想在这里利用 .NET 框架让我的生活更轻松一些。如果我可以使用 .NET 进行整个转换,我会的,但可惜我受到了权力的限制。
那么现有的解决方案有什么问题呢?你想要更简洁的东西吗?更高效?还有什么?如果它没有损坏,我认为除了在客户端上进行格式化之外,您不会找到任何“更好”的东西。
【参考方案1】:
即使问题作者被困在 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
【讨论】:
这应该是答案。 这是最好的答案!【参考方案2】:不是最优雅的,但您可以使用替换删除尾随的 .00。
SELECT REPLACE(CONVERT(VARCHAR, CAST(COUNT([id]) AS MONEY), 1), '.00', '')
FROM tbl
【讨论】:
+1,我最初的想法是使用LEFT(zzz,len(zzz)-3)
,但是这个接缝更好以上是关于使用千位分隔符格式化 COUNT 结果的更简洁方法?的主要内容,如果未能解决你的问题,请参考以下文章