- Home
- SQL Server
- [SQL Server]NULLIF関数で0除算を回避する
[SQL Server]NULLIF関数で0除算を回避する
- 2017/4/17
- SQL Server
- 0除算回避, ISNULL, NULLIF
- コメントを書く

割り算に必須な0除算回避
0のデータがなさそうな計算式でも0除算の対策が必要
たとえば、工場の生産数を生産計画数で割るとき、普通は計画数が0で生産数に値があること自体ありえないと思う。
計画してないものを生産するというのはデータ的に考えられないが、実際にそのようなデータがあったので、そのデータが正しいかどうかは別として、コード的に対策が必要となる。
0除算の対策としては、計算式によるがCASE文で割られる数が0ならば1にしてしまう場合もあるが、NULLにしてしまう対策もある。
NULLIF関数
NULLIF(引数1,引数2)
引数1が引数2と同じならばNULLを返す。
「NULLIF(生産計画数,0)」と書けば、生産計画数が0の場合NULLになる。
データを出すか出さないか
データを出さない場合の0除算回避に使うのは、NULLIF関数を使い。
1 2 3 4 5 6 7 |
DECLARE @JSK int = 60 -- 生産数 DECLARE @KKK int = 0 -- 生産計画数 SELECT '1' WHERE @JSK / NULLIF(@KKK,0) > 1 |
データを出す場合の0除算はCASE文を使用する。
1 2 3 4 5 6 7 |
DECLARE @JSK int = 60 -- 生産数 DECLARE @KKK int = 0 -- 生産計画数 SELECT '1' WHERE @JSK / (CASE WHEN @KKK = 0 THEN 1 ELSE @KKK END) > 1 |
また、生産計画数が0の場合は100にする場合はこうも書ける。
ISNULLは第一引数がNULLの場合第二引数に置き換える関数である。
1 2 3 4 5 6 7 |
DECLARE @JSK int = 60 -- 生産数 DECLARE @KKK int = 0 -- 生産計画数 SELECT '1' WHERE ISNULL(@JSK / NULLIF(@KKK,0),100) > 1 |
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。