首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sql server中删除保持数千分隔符的数字小数?

在Sql server中删除保持数千分隔符的数字小数?
EN

Stack Overflow用户
提问于 2012-11-13 08:02:08
回答 4查看 17.7K关注 0票数 1

我有一个数字,如:12345.678

我希望它是这样的:12,345 (删除其余的!)

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

代码语言:javascript
复制
 select convert(varchar(100), cast(12345.678 as money), 1)

产额:12,345.68

现在我应该删除.68

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

代码语言:javascript
复制
 select    parsename(convert(varchar(100), cast(12345.678 as money), 1),2)

产额:12,345

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-13 08:39:26

在server 2008中,没有一种简单的方法可以做到这一点。Server 2012引入了格式化函数,使您能够执行以下操作:

代码语言:javascript
复制
SELECT FORMAT(12345.67, '#,###')

(虽然这将使人数增加到12 346人)

格式化结果通常不在数据库的范围内--它应该留给您的前端程序/web站点/报表/电子表格等等。然而,如果您真的需要在Server中这样做,我怀疑您的解决方案与您将得到的一样接近,除非您使用CLR集成从String.Format链接到.NET函数。

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

票数 5
EN

Stack Overflow用户

发布于 2012-11-13 08:49:34

Parsename确实是一种创造性的解决方案。我一直在用

代码语言:javascript
复制
select replace(convert(varchar,cast(floor(12345.678) as money),1), '.00', '');
--     parsename(convert(varchar,cast(12345.678 as money),1), 2);

虽然更长。但是也许直接替换比解析例程更快?在任何情况下,这并不是更好的意义,即使它跑得更快21纳秒,在更大的计划中,你在试图改进这样一个问题?

票数 3
EN

Stack Overflow用户

发布于 2012-11-13 08:10:40

首先使用floor()将其转换为整数:

代码语言:javascript
复制
select convert(varchar(100), cast(floor(12345.68) as money), 1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13357265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档