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

SQL Server中CEILING函数返回异常:如何使CEILING(2/10)返回1?

解决CEILING(2/10)返回0而非1的问题

哦,这个坑我之前踩过!问题出在整数除法的截断规则上——当你用两个整数做除法时,绝大多数SQL数据库(比如MySQL、SQL Server、PostgreSQL默认模式)都会直接砍掉小数部分,只返回整数结果。所以2/10实际计算出来是0,再套上CEILING()自然就返回0了,完全符合数据库的运算逻辑,但不是你想要的结果。

要让这个语句返回1,有几种简单的解决办法:

  • 让除法运算产生浮点数结果:
    只需要把其中一个操作数改成浮点数/小数形式就行,比如:

    SELECT CEILING(2.0/10);
    -- 或者
    SELECT CEILING(2/10.0);
    

    这样数据库会按浮点数规则计算,2.0/10得到0.2,CEILING(0.2)就会返回1。

  • 显式转换数据类型:
    如果不想直接写小数,可以用类型转换函数强制把整数转成非整数类型,比如:
    -- MySQL 示例

    SELECT CEILING(CAST(2 AS DECIMAL)/10);
    

    -- SQL Server 示例

    SELECT CEILING(CONVERT(FLOAT, 2)/10);
    
  • 整数运算的向上取整技巧:
    要是你只想用整数运算(避免浮点数精度问题),可以用这个经典公式:CEILING(a/b) = (a + b - 1) // b(整数除法)。对应到你的场景就是:

    SELECT (2 + 10 - 1)/10;
    -- 或者套CEILING也可以,结果一样
    SELECT CEILING((2 + 10 - 1)/10);
    

    原理是给被除数加上除数减1,再做整数除法,相当于把小数部分“进位”,最终结果就是向上取整后的整数。

不同数据库可能在语法细节上有小差异,但核心思路都是一致的:要么让除法得到带小数的结果,要么用整数运算的向上取整公式绕过截断问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:20