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

求助:SQL Server中如何将0.0003按业务需求取整为0.001

解决SQL Server中0.0003向上取整为0.001的问题

你需要的是向上取整到千分位,常规的ROUND或CAST都是四舍五入/截断逻辑,自然达不到要求。可以用CEILING函数结合数值缩放来实现:

直接实现语句

SELECT CEILING(0.0003 * 1000) / 1000; -- 输出结果为0.001

逻辑说明

  1. 先把0.0003乘以1000,将千分位的数值放大到整数位:0.0003 * 1000 = 0.3
  2. 用CEILING函数对0.3向上取整,得到1
  3. 再除以1000,将数值缩回到原精度:1 / 1000 = 0.001

为什么之前的方法无效?

  • ROUND(0.0003, 0):四舍五入到整数位,结果为0;ROUND(0.0003, 0, 1)是截断到整数位,结果也是0,都不符合需求
  • CAST(0.0003 AS numeric(11,3)):四舍五入到千分位,0.0003的千分位后是3(小于5),所以结果为0.000
  • CAST(0.0003 AS decimal(9,2)):四舍五入到百分位,结果为0.00,同样不满足

通用化实现(封装函数)

如果需要处理不同精度的向上取整,可以封装成自定义函数:

CREATE FUNCTION dbo.CeilingToPrecision(@value decimal(18,6), @precision int)
RETURNS decimal(18,6)
AS
BEGIN
    DECLARE @multiplier decimal(18,6) = POWER(10, @precision);
    RETURN CEILING(@value * @multiplier) / @multiplier;
END
GO

-- 使用示例
SELECT dbo.CeilingToPrecision(0.0003, 3); -- 返回0.001
SELECT dbo.CeilingToPrecision(0.0012, 3); -- 返回0.002

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:31:23