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

Oracle SQL插入NUMBER(5,2)字段时如何实现小数截断而非四舍五入?

解决NUMBER(5,2)字段插入时的截断需求

Oracle的NUMBER(p,s)类型默认会将插入的数值四舍五入到指定的小数位,要实现截断保留两位小数的效果,有两种常用方法:

  • 插入时显式使用截断函数
    直接用TRUNC()函数处理要插入的数值,它会直接截断指定小数位后的部分,不会触发四舍五入:

    INSERT INTO XX_DETAILS_TBL (SHAREHOLDING_PER) VALUES (TRUNC(39.999, 2));
    

    执行后字段会存储39.99,符合需求。

  • 通过触发器自动处理(适合批量场景)
    如果需要所有插入操作都自动截断,可以创建一个前置触发器:

    CREATE OR REPLACE TRIGGER TRG_XX_DETAILS_TRUNC
    BEFORE INSERT ON XX_DETAILS_TBL
    FOR EACH ROW
    BEGIN
      :NEW.SHAREHOLDING_PER := TRUNC(:NEW.SHAREHOLDING_PER, 2);
    END;
    /
    

    之后插入数据时无需手动调用TRUNC(),触发器会自动完成截断处理。

注意:NUMBER(p,s)的原生逻辑就是四舍五入,无法通过修改字段类型实现截断,必须主动处理插入的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:32:32