0除算エラーを回避する - SQL

SQLで0除算を回避するコードを紹介します。

下記のテーブルの場合を例にします。
idcategorytotalcount
1チェア1500000.0025
2テーブル650000.003
3サイドボード0.000
4箪笥680000.008
5ベッド154000.001
6本棚250000.005


下記のSQLを実行すると0除算エラーになります。
select category from TotalA where total / count > 100000
エラーメッセージ
メッセージ 8134、レベル 16、状態 1、行 n
0 除算エラーが発生しました。

Server: Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.
ID=3のサイドボードの項目のcountが"0"であるため、上記のSQLを実行すると0除算エラーが発生します。

回避方法

回避方法としてNULLIF関数を利用する方法があります。

書式

NULLIF((条件式1),(条件式2))
条件式1と条件式2が一致した場合、nullを返します。数値を0で割ると除算エラーが起きますが、nullで割る場合は結果はnullとなり除算エラーは発生しません。0になる可能性のある項目をNULLIF関数に置き換え、(条件式1)に0になる可能性のある項目を、(条件式2)に"0"を与えます。

対処例

先のエラーになったSQLを以下のSQLに変更して実行します。
select category, total/count as price from TotalA where total / NULLIF(count,0) > 100000

実行結果

categoryprice
テーブル216666.666666
ベッド154000.000000

補足

nullで除算すると結果は"null"になります。
SQL
select 1000/null as value

実行結果

value
NULL

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
掲載日: 2014-11-09
iPentec all rights reserverd.