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
相关产品推荐
相关产品推荐

