格式编号,空格为千位分隔符

时间:2015-04-09 14:26:45

标签: sql sql-server

第一:是的我知道数字格式不应该在数据层完成,但是我正在使用一个我无法修改的应用程序,也不能在应用程序中格式化结果集。我只能写一个查询。

对于SQL Server 2008查询,我想将空间用作千位分隔符,并且还舍入到两位小数。示例:123363.249999应显示为123 363,25

我试过了:

SELECT REPLACE(CONVERT(varchar, CONVERT(money, 123363.249999), 1), '.00', '')

但这导致123,363.25。我正在寻找更好的解决方案,而不仅仅是用空格替换逗号,用逗号替换点。在查询中设置区域设置会很好。

5 个答案:

答案 0 :(得分:2)

对于SQL Server 2008,我认为你最好的选择是"更好的" SQL Server中的解决方案是编写自定义CLR function来处理基于区域/区域设置的格式。

对于SQL Server 2012或更高版本,已引入FORMAT功能。

答案 1 :(得分:0)

我认为这应该适合你:

SELECT REPLACE(REPLACE(CONVERT(varchar, CONVERT(money, 12765763363.249999), 1), ',', ' '), '.', ',');

它将输出以下内容:

12 765 763 363,25

答案 2 :(得分:0)

这也是另一种做法,但它并不是一种“更干净”的做事方式。

SELECT REPLACE(REPLACE(CONVERT(varchar,CAST(123363.249999 AS money),1),',',' '),'.',',')

输出:

123 363,25

答案 3 :(得分:0)

这是最好的方式。复制并粘贴到excel后,它就像魅力一样完美无缺

REPLACE(REPLACE(CONVERT(VARCHAR,CAST(@yourbig number  AS money) ,1)  ,',',' '), '.', ',')  AS 'SQL gap for thousands finally revealed'

CONVERT(VARCHAR)也许必须在那里,否则你不能用逗号替换逗号....我仍然试图让它更好更短但没有找到任何其他的东西......这里有一些{{ 3}}但这不起作用

答案 4 :(得分:0)

这可能不是最合适的解决方案,但在我看来它是最清晰的解决方案之一

SELECT LTRIM(REPLACE(FORMAT(1234567890.1234,'### ### ### ##0.00'), '.', ','))