簡體   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