我需要在查询中精确地在表中插入一条记录。例如:
insert into spend_amount (record_no,purchase_amount)
values ('1',(to_number(100.99/2)));
我有一个purchase_amount列作为VARCHAR2。因此,在执行此查询时,它将插入为50.495
。但我只需插入两个精度位置。预期结果应为50.49
或应为50.50
。怎么做到这一点?
答案 0 :(得分:2)
Oracle SQL包含round()
函数。第一个参数是值,第二个参数控制舍入程度。所以要舍入到小数点后两位:round((100.99/2),2)
。 Find out more
不确定您为什么在示例代码中进行了to_number()
调用,因为您已经拥有 一个数字。此外,将数值存储为字符串是一个非常糟糕的主意:它是一辈子不必要的痛苦。
答案 1 :(得分:1)
首先,将purchase_amount
之类的数值存储为varchar2
是没有意义的。它确实应该存储为一个数字,在这种情况下,它实际上会有你自动指定的精度。
其次,在数值上调用to_number
是没有意义的。 to_number
只接受一个字符串。因此,如果传入一个数值,Oracle必须隐式地将数字转换为字符串,然后to_number
显式地将字符串转换回一个数字,只是为了让你回到你开始的地方。
如果要将值四舍五入为50.5,请使用round
。如果要将值截断为50.49,请使用trunc
。
insert into spend_amount( record_no, purchase_amount )
values( 1, round( 100.99/2, 2 ));
或
insert into spend_amount( record_no, purchase_amount )
values( 1, trunc( 100.99/2, 2 ));