【问题标题】:Teradata: Division and large decimalsTeradata:除法和大小数
【发布时间】:2020-04-17 20:44:14
【问题描述】:
我正在尝试将两个小数 (15,2) 数字相除并返回 15 位的高精度小数,但我不断收到 [2616] 小数点后 10 位以外的数字溢出错误,还有其他方法吗?写这个以获得句点右边 15 位的小数结果?
选择 (cast(19983.74 as decimal(15,2))*1.0000000000000)/(cast(15897.40 as decimal(15,2))*1.0000000000000)
【问题讨论】:
标签:
decimal
overflow
teradata
division
divide
【解决方案1】:
对于更复杂的计算,我更喜欢将第一个操作数转换为 NUMBER,这会产生最大可能的精度:
SELECT Cast(19983.74 AS NUMBER)/15897.40
1.25704454816510875992300627775611106219
最后回滚到你需要的任何东西:
SELECT Cast(Cast(19983.74 AS NUMBER)/15897.40 AS DECIMAL(38,15))
1.257044548165109
【解决方案2】:
请参阅Teradata Documentation。结果精度的默认值取决于 MaxDecimal 设置,但大于 MaxDecimal 设置的 CAST 将覆盖。
SELECT CAST(19983.74 AS DECIMAL(38,15))/15897.40