在 SQL Server 中,将整数转换为百分比显示(例如:75 → '75%' 或 0.75),通常有以下几种常见需求和对应方法:
场景 1:整数表示"百分点"(如 75 表示 75%),转为带 % 符号的字符串
sql
DECLARE @value INT = 75;
-- 方法1:直接拼接 '%'
SELECT CAST(@value AS VARCHAR) + '%' AS 百分比;
-- 结果: '75%'
适用于:前端只需展示,不参与计算。
场景 2:整数是"比例基数为100"的值,转为小数形式(用于计算)
sql
DECLARE @value INT = 75;
-- 转为 0.75(可用于后续数学运算)
SELECT CAST(@value AS DECIMAL(10,4)) / 100.0 AS 比例;
-- 结果: 0.7500
推荐用 DECIMAL 或 FLOAT,避免整数除法截断。
场景 3:两个整数相除,结果以百分比形式展示(最常见!)
例如:完成数 / 总数 × 100%
sql
DECLARE @completed INT = 75;
DECLARE @total INT = 100;
-- 正确方式:先转为浮点,再计算
SELECT
CAST(@completed AS FLOAT) / NULLIF(@total, 0) * 100 AS 百分比数值, -- 75.0
CAST(CAST(@completed AS FLOAT) / NULLIF(@total, 0) * 100 AS VARCHAR) + '%' AS 百分比字符串; -- '75%'
关键点:必须先转为非整数类型(如 FLOAT, DECIMAL),否则 75/100 = 0(整数除法)。
用 NULLIF(total, 0) 防止除零错误。
实际查询示例
sql
SELECT
department,
completed_tasks,
total_tasks,
-- 百分比数值(保留2位小数)
ROUND(
CAST(completed_tasks AS FLOAT) / NULLIF(total_tasks, 0) * 100,
2
) AS completion_rate_percent,
-- 百分比字符串
CAST(
ROUND(
CAST(completed_tasks AS FLOAT) / NULLIF(total_tasks, 0) * 100,
2
) AS VARCHAR
) + '%' AS completion_rate_str
FROM task_summary;
常见错误
sql
-- 错误1:整数除法 → 结果为 0
SELECT 75 / 100; -- 返回 0
-- 错误2:未处理除零
SELECT 75 / 0; -- 报错!
-- 错误3:直接对整数拼 %
SELECT 75 + '%'; -- 类型不匹配错误
