我需要将一个十进制值舍入到作为参数传递的deicmal位置。 通过做 : 从tbl_Test中选择round(n,@ a)
其中n的类型为小数18,4 和@ a = 2 我得到了结果,但最后添加了两个零。 我想得到没有那个零的结果..但是返回值应该是ype decimal..not string。
是否有可能:cast(round(n,@ a)as decimal(18,@ a))?
答案 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,则您具有相同类型的选项 - 两者都具有内置函数,可以为您执行舍入。可能需要一些操作,但您也可以将用户定义的比例值传递给它们。