0除算エラーを回避する - SQL
SQLで0除算を回避するコードを紹介します。
例
下記のテーブルの場合を例にします。
id | category | total | count |
1 | チェア | 1500000.00 | 25 |
2 | テーブル | 650000.00 | 3 |
3 | サイドボード | 0.00 | 0 |
4 | 箪笥 | 680000.00 | 8 |
5 | ベッド | 154000.00 | 1 |
6 | 本棚 | 250000.00 | 5 |
下記の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関数を利用する方法があります。
書式
条件式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
実行結果
category | price |
テーブル | 216666.666666 |
ベッド | 154000.000000 |
補足
nullで除算すると結果は"null"になります。
select 1000/null as value
実行結果
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。