round四舍五入到指定小数位,ceil向上取整(不小于原数的最小整数),floor向下取整(不大于原数的最大整数);三者方向与逻辑不同,需依业务需求选用。

SQL 中的数值函数 ROUND、CEIL(或 CEILING)、FLOOR 用于对数字进行不同方式的取整,但它们的逻辑和适用场景有明显区别。掌握它们的核心行为,能避免计算错误,尤其在金额处理、分页、统计汇总等场景中很关键。
ROUND:四舍五入到指定小数位
ROUND 按照数学规则对数值进行四舍五入,支持指定保留的小数位数(可为负数)。
- 语法:
ROUND(number, decimal_places) -
decimal_places为正数:保留小数点后几位(如ROUND(3.14159, 2)→3.14) -
decimal_places为 0:四舍五入到整数(如ROUND(2.7, 0)→3) -
decimal_places为负数:向左舍入(如ROUND(1234.56, -2)→1200,即舍入到百位) - 注意:不同数据库对 .5 的处理可能略有差异(如部分版本银行家舍入),但主流 MySQL、PostgreSQL、SQL Server 默认是标准四舍五入
CEIL / CEILING:向上取整(不小于原数的最小整数)
CEIL(或 CEILING,二者功能完全相同)把任意数值“进一”,结果总是 ≥ 原值的最小整数。
- 语法:
CEIL(number)或CEILING(number) -
CEIL(4.1)→5;CEIL(-2.9)→-2(注意负数:-2 大于 -2.9) - 常用于计算页数:
CEIL(total_count / page_size)确保余数也占一页 - 不接受小数位参数,只返回整数
FLOOR:向下取整(不大于原数的最大整数)
FLOOR 把任意数值“舍去小数”,结果总是 ≤ 原值的最大整数。
- 语法:
FLOOR(number) -
FLOOR(4.9)→4;FLOOR(-2.1)→-3(注意负数:-3 小于 -2.1) - 适合分组取整(如按 10 元档位归类价格:
FLOOR(price / 10) * 10) - 同样只返回整数,无小数位控制
对比小结:三者对同一数值的行为差异
以 -3.7 和 3.7 为例:
-
ROUND(3.7, 0)→4;ROUND(-3.7, 0)→-4 -
CEIL(3.7)→4;CEIL(-3.7)→-3 -
FLOOR(3.7)→3;FLOOR(-3.7)→-4
可见,CEIL 和 FLOOR 是“方向确定”的截断,而 ROUND 是“就近取整”。实际使用时,先明确业务需求:要进一?要舍去?还是要四舍五入?再选对应函数。










