我在PostgreSQL中有一个表定义为:
CREATE TABLE ITEM_PROPERTIES
(
ITEM_ID NUMERIC(11,0),
ITEM_DIMENSIONAL_UOM VARCHAR(30),
ITEM_HEIGHT NUMERIC(38,14),
ITEM_WIDTH NUMERIC(38,14),
ITEM_LENGTH NUMERIC(38,14),
ITEM_WEIGHT_UOM VARCHAR(30),
ITEM_WEIGHT NUMERIC(38,14),
ITEM_CUBE NUMERIC(38,14)
);
项目的长度/宽度/高度存储在表格中,我需要通过以下SQL计算多维数据集:
update ITEM_PROPERTIES set ITEM_CUBE = ITEM_WIDTH*ITEM_HEIGHT*ITEM_LENGTH
where ITEM_WIDTH<10000 and ITEM_HEIGHT < 10000 and ITEM_LENGTH<10000;
然后我遇到精度溢出:
ERROR: Resulting scale overflows maximum precision
如何解决这个问题?
答案 0 :(得分:2)
最后,这个SQL有效:
update ITEM_PROPERTIES set ITEM_CUBE = ITEM_WIDTH::decimal(12,3)*ITEM_HEIGHT::decimal(12,3)*ITEM_LENGTH::decimal(12,3)
where ITEM_WIDTH<10000 and ITEM_HEIGHT < 10000 and ITEM_LENGTH<10000;
答案 1 :(得分:0)
可能使用truncation?
update ITEM_PROPERTIES set ITEM_CUBE = trunc(ITEM_WIDTH*ITEM_HEIGHT*ITEM_LENGTH, 14)
where
ITEM_WIDTH<10000
and ITEM_HEIGHT < 10000
and ITEM_LENGTH<10000;
答案 2 :(得分:0)
您可以尝试将其四舍五入到该顺序。
但真正的问题源于你的类型。如果长度,宽度和高度为numeric(38,14)
,则卷应更像numeric(114,42)
。事实上,在尺度和精度都用在三维空间的情况下,可以容纳更多的载体。
恕我直言,完全摆脱精确度和比例:将数字存储为numeric
而不是numeric(38,14)
,并避免首先出现问题。 (如果确实需要14位小数,请在应用程序中使用或使用之前的触发器进行舍入。)