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

ゼロ割発生

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

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

解決策

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

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

まとめ

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

日々のITエンジニアの日常作業を発信しています。
また、様々なレビュー記事も書いていますので、ぜひご活用ください。

基本的に投稿は毎週月曜日の午前です。
2025年2月中旬より手術の為に入院をしていましたが、ようやくブログ投稿の復帰ができそうです。
4月中旬~下旬には再開予定です。

では今週も頑張っていきましょう!
ガンバー!!

SQL/データベース(DB)

コメント