我有一个数字,如:12345.678
我希望它是这样的:12,345 (删除其余的!)
增加数千台分离器的一个解决方案是:
select convert(varchar(100), cast(12345.678 as money), 1)产额:12,345.68
现在我应该删除.68
我偶然发现了一个使用parseName的漂亮解决方案:
select parsename(convert(varchar(100), cast(12345.678 as money), 1),2)产额:12,345
问:这个问题有更好的解决方案吗?(也许不涉及其他函数/字符串操作?)
发布于 2012-11-13 08:39:26
在server 2008中,没有一种简单的方法可以做到这一点。Server 2012引入了格式化函数,使您能够执行以下操作:
SELECT FORMAT(12345.67, '#,###')(虽然这将使人数增加到12 346人)
格式化结果通常不在数据库的范围内--它应该留给您的前端程序/web站点/报表/电子表格等等。然而,如果您真的需要在Server中这样做,我怀疑您的解决方案与您将得到的一样接近,除非您使用CLR集成从String.Format链接到.NET函数。
如果您确实使用parseName执行您的解决方案,请注意它可能在国际上不起作用(例如,在欧洲的一些地区,,被用作小数分隔符)。这对您来说可能不是问题,但如果是,那么您将需要一个允许显式控制格式的解决方案。
发布于 2012-11-13 08:49:34
Parsename确实是一种创造性的解决方案。我一直在用
select replace(convert(varchar,cast(floor(12345.678) as money),1), '.00', '');
-- parsename(convert(varchar,cast(12345.678 as money),1), 2);虽然更长。但是也许直接替换比解析例程更快?在任何情况下,这并不是更好的意义,即使它跑得更快21纳秒,在更大的计划中,你在试图改进这样一个问题?
发布于 2012-11-13 08:10:40
首先使用floor()将其转换为整数:
select convert(varchar(100), cast(floor(12345.68) as money), 1)https://stackoverflow.com/questions/13357265
复制相似问题