You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

涉及round()和ceiling()的两个SQL查询结果为何存在差异

两个SQL查询结果不一致的核心原因

差异本质是SQL运算受操作数数据类型影响,触发了不同的除法规则,和CEILING(36.3)返回的数值是不是37没有直接关系:

  • 第一条查询 SELECT ROUND(CEILING(36.3) / 4,2) 的执行流程:
    1. CEILING(36.3) 计算出的数值确实是37,但因为输入参数36.3是小数字面量,函数返回值是带小数属性的数值类型(实际为37.0这类非整数值类型),不是纯整数类型
    2. 做除法时,一侧是小数类型、一侧是整数4,数据库会先做隐式类型转换,把两边统一成小数类型再计算,得到精确的除法结果9.25
    3. 最后对9.25做保留两位小数的ROUND处理,最终返回9.25
  • 第二条查询 SELECT ROUND(37 / 4,2) 的执行流程:
    1. 参与除法的37和4都是整数字面量,两边都是整数类型时,当前环境会直接走整数除法逻辑:截断所有小数部分,只返回整数商,也就是37除以4直接得到整数9
    2. 后续的ROUND操作是对已经算出的整数9做保留两位小数处理,结果自然还是9,不可能补回之前被截断的0.25

你可以自己做个验证:把第二条查询里的任意一个整数改成小数形式,比如写为SELECT ROUND(37.0 / 4,2),执行后就会得到和第一条一致的9.25结果。

内容的提问来源于stack exchange,提问作者gyiernahfufie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:57:30