从Number中删除小数,在Sql server中保留数千个分隔符?

Roy*_*mir 1 sql-server sql-server-2008

我有一个像: 12345.678

我希望它像:( 12,345删除剩下的!)

添加数千个分离器的一个解决方案是:

 select convert(varchar(100), cast(12345.678 as money), 1)
Run Code Online (Sandbox Code Playgroud)

产量: 12,345.68

现在我应该删除 .68

我用parseName偶然发现了一个漂亮的解决方案 :

 select    parsename(convert(varchar(100), cast(12345.678 as money), 1),2)
Run Code Online (Sandbox Code Playgroud)

产量: 12,345

问题:这个问题有更好的解决方案吗?(也许不涉及其他函数/字符串操作?)

Ric*_*ard 5

在SQL Server 2008中没有简单的方法.SQL Server 2012引入了FORMAT功能,使您可以执行以下操作:

SELECT FORMAT(12345.67, '#,###')
Run Code Online (Sandbox Code Playgroud)

(虽然这会将数字四舍五入到12,346)

格式化结果通常不在数据库的范围内 - 它应该留给您的前端程序/网站/报告/电子表格等.但是,如果您确实需要在SQL Server中执行此操作,我怀疑你的解决方案尽可能接近,除非你使用CLR Integration来链接到.NET的String.Format函数.

如果您使用parseName确实使用了您的解决方案,请注意它可能无法在国际上运行(例如,在欧洲部分地区,用作小数分隔符).这对您来说可能不是问题,但如果是,那么您将需要一个允许您明确控制格式的解决方案.