[SQLServer]SQL内の計算でゼロ割りを防止する

ゼロ割発生

商品Aの現在庫数から一か月の出庫数を計算し、在庫日数(あと何か月在庫があるか)を求めます。
ところが商品Aの出庫があまりにも少なく、一か月の出庫数が全くない(ゼロ)事もあり得ます。

計算式で書くと
商品Aの現在庫数 ÷ 一か月の出庫数(ゼロ)
このままSQLで計算させるとゼロ割になってしまい、正常なSQL結果が得られません。

解決策

NULLIF関数を使用します。
NULLIF (値1,値2)
値1と値2が等しくない場合、値1を返します。
値1と値2が等しい場合、NULLを返します。

これを計算式に当てはめると、
商品Aの現在庫数 ÷ NULLIF (一か月の出庫数,0)
この結果、
商品Aの現在庫数 ÷ NULL
NULLで割る事になり結果もNULLが返ってきます。

まとめ

計算式を使用するとゼロ割が発生する確率が高いです。
仮にデータ上たまたまゼロ割が発生していなくても、データの変化状況によってゼロ割は思わぬところで発生してしまいます。
気をつけましょう。

コメント