【SQL Server】IF文(IIF関数)の使い方|CASE文との違い・使い分けも解説

当ページのリンクには広告が含まれています。
SQLの文法
  • URLをコピーしました!

SQL Serverにおいて、条件に応じて異なる値を返す場合、昔は CASE WHEN 文を使うのが一般的でした。

しかし、SQL Server 2012以降では IIF() 関数が導入され、他の言語の if に近い構文で記述できるようになっています。

ただし、他のDB(MySQLやPostgreSQLなど)では IIF は使えません。そのため、将来的に他のDBMSに載せ替える可能性がある場合は、互換性のある CASE を使う方が無難です。

目次

IIF関数の基本構文と使い方

単純な条件分岐

IIF( 条件, 真のときの値, 偽のときの値 )

パラメータは、条件、Trueの場合の戻り値、Falseの場合の戻り値の3つです。

今回は点数が60点以上を合格、60点未満を不合格と返す命令をサンプルとします。

条件式点数>=60
Trueの戻り値合格
Falseの戻り値不合格
SELECT IIF(点数 >= 60, '合格', '不合格') AS 判定 FROM テスト結果TBL;

ネスト(入れ子)による複数条件

条件が増えればIIFをネストして記述すること可能です。

SELECT 
  IIF(点数 >= 60, '合格', 
    IIF(点数 >= 30, '赤点', '青点')
  ) AS 判定
FROM テスト結果TBL;

このサンプルでは60点以上が【合格】、30点以上60点未満が【赤点】、30点未満は【青点】を返します。

※どこかの学校の点数評価ですね(笑)

CASE文との違いと使い分け

SQL標準との互換性

IIF は SQL Server 特有の関数です。PostgreSQL、MySQL、Oracle では使用できません。一方、CASE はSQL標準であり、すべてのDBMSで使える構文です。

条件数と可読性の観点

  • 条件が2つだけなら IIF で十分。
  • 条件が3つ以上ある場合や NULL 判定を含むときは、可読性の高い CASE を推奨します。
SELECT 
  CASE 
    WHEN 点数 >= 60 THEN '合格'
    WHEN 点数 >= 30 THEN '赤点'
    ELSE '青点'
  END AS 判定
FROM テスト結果TBL;

IIF関数の注意点(バージョン制限など)

  • SQL Server 2012以降でのみ利用可能。
  • NULLに絡む評価順によっては意図しない結果を返すことがある。
  • CASE に比べて柔軟性がやや低い。

まとめ|SQL Serverでの条件分岐の使い分け

SQL ServerのSELECT文内で処理を分岐する方法として、IIFとCASE WHENをご紹介しました。

元々SQL ServerではIF文は使えませんでしたが、Ver2012からIIF文として利用できるようになりました。

逆に言えば、Ver2012より前の場合は使えませんし他のDBMSのSQL構文との互換性もありません。

条件が少ない場合IF文の方が使いやすいとは思いますが、CASE文で代替できる処理はCASE文で書いておいた方が後々困ることがないように思います。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次