1. ホーム
  2. sql

[解決済み】Teradata - 計算中に数値のオーバーフローが発生しました。

2022-02-07 05:18:26

質問

Teradataのクエリで、ある計算で問題が発生しました。 2つの数値を掛け合わせるのですが、クエリを実行すると、"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 .

また、2つの小数を掛けると、端数の桁数が加算されます。 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桁以上を使う人はいないと思います。