在SQL Server中找不到百分比

时间:2019-07-09 06:28:19

标签: sql sql-server

我有以下SQL代码,它不会产生百分比值

    declare @prcnt numeric(5,2)=0;
    declare @nulls int=15,@total_col int=24;
    select @prcnt=(@nulls/@total_col)*100;
    select @prcnt;

可以看到here的小提琴。

5 个答案:

答案 0 :(得分:5)

declare @prcnt decimal(8,4)=0;
declare @nulls decimal(8,4)=15,@total_col decimal(8,4)=24;
select @prcnt=(@nulls/@total_col)*100;
select @prcnt;

答案 1 :(得分:3)

结果为零,因为@null和@total_col都是整数。 15除以24所得的结果是0.625,然后将其转换为零,因为它们是整数。使用浮点或将其中之一转换为浮点。

declare @prcnt numeric(5,2)=0;
declare @nulls int=15,@total_col int=24;
select @prcnt=(cast(@nulls as numeric(19,4))/@total_col)*100;
select @prcnt;

答案 2 :(得分:3)

乘以1.0或使用数据类型十进制即可解决问题。我更喜欢* 1.0

declare @prcnt numeric(5,2)=0;
declare @nulls int=15,@total_col int=24;
select @prcnt=(1.0*@nulls/@total_col)*100;
select @prcnt;

答案 3 :(得分:1)

尝试如下,此处通过将1.00引擎乘以隐式强制转换

    declare @prcnt numeric(5,2)=0;
    declare @nulls int=15,@total_col int=24;
    select @prcnt=(@nulls*1.00/@total_col)*100; 
    select @prcnt;

或进行显式转换

declare @prcnt numeric(5,2)=0;
declare @nulls int=15,@total_col int=24;
select @prcnt=(cast( @nulls as float)/@total_col)*100;
select @prcnt;

答案 4 :(得分:1)

@nulls和@total_col也应为数字:

DECLARE @prcnt numeric(5,2)=0;
DECLARE @nulls numeric(5,2)=15, @total_col numeric(5,2)=24;
SELECT @prcnt=(@nulls/@total_col)*100 ;
SELECT @prcnt;

或者您可以在划分时投射它们:

DECALRE @prcnt numeric(5,2)=0;
DECLARE @nulls int=15,@total_col int=24;
SELECT @prcnt=(CAST(@nulls as numeric(5,2))/CAST(@total_col as numeric(5,2)))*100;
SELECT @prcnt;