第一:是的我知道数字格式不应该在数据层完成,但是我正在使用一个我无法修改的应用程序,也不能在应用程序中格式化结果集。我只能写一个查询。
对于SQL Server 2008查询,我想将空间用作千位分隔符,并且还舍入到两位小数。示例:123363.249999
应显示为123 363,25
。
我试过了:
SELECT REPLACE(CONVERT(varchar, CONVERT(money, 123363.249999), 1), '.00', '')
但这导致123,363.25
。我正在寻找更好的解决方案,而不仅仅是用空格替换逗号,用逗号替换点。在查询中设置区域设置会很好。
答案 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'), '.', ','))