繁体   English   中英

sql round函数

[英]sql round function

我需要将一个十进制值舍入为小数位,该小数位将作为参数传递。 通过执行以下操作:从tbl_Test中选择round(n,@ a)

其中n是十进制18,4和@ a = 2类型,我得到了结果,但最后添加了两个零。 我想得到没有那个零的结果..但是返回值应该是ype十进制..不是字符串。

是否有可能像:cast(round(n,@ a)as decimal(18,@ a))?

如果只需要2个小数,则需要将定义中的小数位更改为2。因此,完全符合您的预期:

强制转换(舍入(n,@ a)为十进制(18,@ a))

MS SQL Server不支持在数据类型定义中使用参数。 现在,“客户端”代码可以了。 因此,这样的方法可能适合您(使用t-sql在db sproc中编写,或者使用c#或其他在业务层中编写)。

use tempdb;
go
create 
--drop 
table tbl_test 
( n  decimal ( 18, 4 ) );
declare @n as decimal ( 18, 4 );
SET @n = 12.0006;
insert into tbl_test ( n ) values ( @n );
SET @n = 12.0060;
insert into tbl_test ( n ) values ( @n );
SET @n = 12.0600;
insert into tbl_test ( n ) values ( @n );
SET @n = 12.6000;
insert into tbl_test ( n ) values ( @n );

select 
    cast ( round ( n, 2 ) as decimal ( 18, 2 ) )
    , n
from tbl_test
order by n ASC

declare @var_scale integer;
set @var_scale = 2;
declare @sql nvarchar(max) = N'
select 
    cast ( round ( n, @a ) as decimal ( 18, @a ) )
    , n
from tbl_test
order by n ASC
'
set @sql = REPLACE ( @sql, '@a', @var_scale );
execute ( @sql );

但是,就像托马斯在对您的问题的第一条评论中所说的那样,没有很好地解释为什么,这似乎是愚蠢的。 例如,在C#中,将作为字段n中的一个消耗值,简单地舍入到2位。 请参阅此stackoverflow文章。 如果客户端是Crystal Reports或Sql Server Reporting Services,则您具有相同的选项-都具有内置功能,可以为您执行舍入。 可能需要做一些事情,但是您也可以将用户定义的比例值传递给它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM