在下面的代码中,我得到了一定的百分比。
RatioPercent = case
when input.Name = 'Abc' then convert(int, lbase.AbcRatio)
end,
我希望RatioPercent被截断(缩短(到小数点后两位,并且截断的结果必须四舍五入到下一个完整的百分比。
例如:96.001%
将作为96
交付,80.01%
将作为81
交付。
如果我使用cast()
,那么它只会给我96
和80
。
RatioPercent = case
when input.Name = 'Abc' then cast(convert(int, lbase.AbcRatio) as decimal (10, 0))
end,
但如果我用ceiling()
而不是cast()
,那么它会给我97和81。
您需要将ceiling
和cast
组合在一起,首先强制转换到小数点后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)
结果为96
和81
更新
在一个大约有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))