Teradata - 计算期间发生数值溢出
Teradata - Numeric overflow occurred during computation
我的一个 Teradata 查询中的计算出现问题。我正在将两个数字相乘,但在 运行 查询时出现 "Numeric overflow occurred during computation." 错误。我 运行 是两个字段的类型,它们是 DECIMAL(18,15) 和 DECIMAL(18,9)。当我进行除法时,我尝试将它们都转换为 DECIMAL(18,18),但它仍然会抛出错误。这是计算。 UNITS 是 18,15,PRICE 是 18,9。任何人都可以给我任何解决此问题的提示吗?
cast(UNITS as DECIMAL(18,18))* cast(PRICE as DECIMAL(18,18)) as NEW_CALC
谢谢,
克雷格
你使用了错误的数据类型,DECIMAL(18,15)
表示18位数字,其中15位是小数,所以最大值是999.999999999999999
。
当您将两位小数相乘时,小数位数相加,NEW_CALC
得到 38 位小数。做一个 TYPE(cast(UNITS as DECIMAL(18,18))* cast(PRICE as DECIMAL(18,18)))
.
这会起作用:
cast(UNITS as DECIMAL(38,15))* PRICE
但是你最好将列的数据类型更改为 (18,2) 或 (18,4) 之类的东西,我认为没有人使用超过 4 位的价格。
我的一个 Teradata 查询中的计算出现问题。我正在将两个数字相乘,但在 运行 查询时出现 "Numeric overflow occurred during computation." 错误。我 运行 是两个字段的类型,它们是 DECIMAL(18,15) 和 DECIMAL(18,9)。当我进行除法时,我尝试将它们都转换为 DECIMAL(18,18),但它仍然会抛出错误。这是计算。 UNITS 是 18,15,PRICE 是 18,9。任何人都可以给我任何解决此问题的提示吗?
cast(UNITS as DECIMAL(18,18))* cast(PRICE as DECIMAL(18,18)) as NEW_CALC
谢谢,
克雷格
你使用了错误的数据类型,DECIMAL(18,15)
表示18位数字,其中15位是小数,所以最大值是999.999999999999999
。
当您将两位小数相乘时,小数位数相加,NEW_CALC
得到 38 位小数。做一个 TYPE(cast(UNITS as DECIMAL(18,18))* cast(PRICE as DECIMAL(18,18)))
.
这会起作用:
cast(UNITS as DECIMAL(38,15))* PRICE
但是你最好将列的数据类型更改为 (18,2) 或 (18,4) 之类的东西,我认为没有人使用超过 4 位的价格。