Teradata - 计算期间发生数字溢出

时间:2015-05-13 16:50:27

标签: sql casting teradata

我在其中一个Teradata查询中遇到了计算问题。我将两个数相乘,但我得到一个“计算过程中出现数字溢出”。运行查询时出错。我在两个字段上运行了一个类型,它们是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

谢谢,

克雷格

1 个答案:

答案 0 :(得分:5)

您使用了错误的数据类型,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位数的价格。