我在其中一个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
谢谢,
克雷格
答案 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位数的价格。