SQL Server中如何计算百分比?除法操作无结果问题求助
在SQL Server中计算百分比的解决方案
首先看你提供的执行截图:
你的问题和Modulo(取模,%运算符)无关,核心原因是SQL Server中整数之间的除法会自动取整为整数。比如如果分子小于分母,直接执行除法得到的结果是0,而非预期的小数,这就会让你误以为没有得到结果。
解决这个问题的关键是让除法运算返回小数结果,再乘以100得到百分比,具体有几种常用方法:
- 方法1:将其中一个操作数转换为浮点/十进制类型
通过CAST或CONVERT把分子或分母转为非整数类型,触发浮点除法:
-- 转换分子为DECIMAL类型,保留两位小数 SELECT (CAST(已完成数 AS DECIMAL(18,2)) / 总数) * 100 AS 完成百分比 -- 转换分母为FLOAT类型 SELECT (已完成数 / CAST(总数 AS FLOAT)) * 100 AS 完成百分比
- 方法2:用数值常量强制转换
给其中一个数乘以1.0(浮点常量),自动将整个表达式转为浮点运算:
SELECT (已完成数 * 1.0 / 总数) * 100 AS 完成百分比
- 方法3:处理分母为0的异常情况
如果分母可能为0,直接除法会报错,用NULLIF把0转为NULL,再用ISNULL设置默认值:
-- 分母为0时返回NULL SELECT (已完成数 * 1.0 / NULLIF(总数, 0)) * 100 AS 完成百分比 -- 分母为0时返回0 SELECT ISNULL((已完成数 * 1.0 / NULLIF(总数, 0)) * 100, 0) AS 完成百分比
内容的提问来源于stack exchange,提问作者Desu235
相关产品推荐
相关产品推荐

