sql round函数

时间:2010-06-25 04:18:36

标签: sql

我需要将一个十进制值舍入到作为参数传递的deicmal位置。 通过做 : 从tbl_Test中选择round(n,@ a)

其中n的类型为小数18,4 和@ a = 2 我得到了结果,但最后添加了两个零。 我想得到没有那个零的结果..但是返回值应该是ype decimal..not string。

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

1 个答案:

答案 0 :(得分:0)

如果您只想要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个位置。请参阅this stackoverflow文章。如果客户端是Crystal Reports或Sql Server Reporting Services,则您具有相同类型的选项 - 两者都具有内置函数,可以为您执行舍入。可能需要一些操作,但您也可以将用户定义的比例值传递给它们。