在SQL Server中,将结果截断到小数点后两位,然后四舍五入到下一个整数百分比



在下面的代码中,我得到了一定的百分比。

RatioPercent = case 
when input.Name = 'Abc' then convert(int, lbase.AbcRatio)
end,

我希望RatioPercent被截断(缩短(到小数点后两位,并且截断的结果必须四舍五入到下一个完整的百分比。

例如:96.001%将作为96交付,80.01%将作为81交付。

如果我使用cast(),那么它只会给我9680

RatioPercent = case 
when input.Name = 'Abc' then cast(convert(int, lbase.AbcRatio) as decimal (10, 0))
end,

但如果我用ceiling()而不是cast(),那么它会给我97和81。

您需要将ceilingcast组合在一起,首先强制转换到小数点后2位,然后四舍五入:

select ceiling(cast(96.001 as decimal(10,2)))
union all 
select ceiling(cast(80.01 as decimal(10,2)))

结果分别为96和81。

  • 在线演示

编辑,关于Jeroen Mostert的评论,如果您需要96.009才能四舍五入到96,这里有一个使用round:的替代选项

select ceiling(round(96.009, 2, 1))

这也适用:

select ceiling(cast(96.001 * 100 as int) /100.0)
union all
select ceiling(cast(80.01 * 100 as int) /100.0)

结果为9681

更新

在一个大约有50000行的表上运行了一些测试,当前接受的答案(ceiling(cast(96.001 as decimal(10,2)))(运行速度快了3ms。。。所以坚持下去。

这里有一个快速测试,有几个选项可以插入到自己数据库的表中:

set statistics time on
--uncomment exactly one line below
--select [column]  --control
--select ceiling(([column] * 100) /100.0) 
--select ceiling(cast([column] as decimal(10,2))) 
--select ceiling(floor([column] * 100 )/100)
from [Table]
set statistics time off

您可能想要cast与2位小数的组合,然后是ceiling:

ceiling(cast(convert(int, lbase.AbcRatio) as decimal (10, 2))

相关内容

  • 没有找到相关文章

最新更新