関数リファレンス > 関数 > IIF
  

IIF

条件の結果に基づいて、指定した2つの値のうちの1つを返します。

構文

IIF( condition, value1 [,value2] )
引数
必須/
オプション
説明
condition
必須
値を求める条件。TRUEまたはFALSEになる有効な式を必要に応じて入力できます。
value1
必須
任意のデータ型(Binaryを除く)。条件がTRUEのときに返したい値。戻り値は常にこの引数で指定したデータ型になります。有効な式(別のIIF式を含む)を必要に応じて入力できます。
value2
オプション
任意のデータ型(Binaryを除く)。条件がFALSEのときに返したい値。有効な式(別のIIF式を含む)を必要に応じて入力できます。
一部のシステムで使用される条件関数と異なり、IIF関数ではFALSE条件(value2)は必須ではありません。value2を省略すると、関数は条件がFALSEのときに以下の値を返します。
例えば、下記の式にはFALSE条件が含まれておられず、value1は文字列データ型であるため、データ統合はFALSEとなる各行に対して空の文字列を返します。
IIF( SALES > 100, EMP_NAME )
SALES
EMP_NAME
RETURN VALUE
150
John Smith
John Smith
50
Pierre Bleu
'' (empty string)
120
Sally Green
Sally Green
NULL
Greg Jones
'' (empty string)

戻り値

条件がTRUEの場合はvalue1
条件がFALSEの場合はvalue2
例えば、下記の式にはFALSE条件であるNULLが含まれているため、データ統合はFALSEとなる各行に対してNULLを返します。
IIF( SALES > 100, EMP_NAME, NULL )
SALES
EMP_NAME
RETURN VALUE
150
John Smith
John Smith
50
Pierre Bleu
NULL
120
Sally Green
Sally Green
NULL
Greg Jones
NULL
データにマルチバイト文字が含まれ、条件引数で文字列データを比較する場合、タスクを実行するSecure Agentのコードページに応じた戻り値が返されます。

IIFとデータ型

IIFを使う場合、戻り値のデータ型は常に最大の精度を持つ結果のデータ型と同じです。
例えば、次のような式があるとします。
IIF( SALES < 100, 1, .3333 )
TRUEの結果(1)は整数であり、FALSEの結果(.3333)は小数です。Decimalデータ型は整数データ型よりも精度が高くなります。したがって、戻り値のデータ型は常に10進となります。
少なくとも1つの結果がDoubleの場合、戻り値のデータ型はDoubleになります。

IIFの特殊な使用法

ネストしたIIF文を使用して、複数の条件をテストできます。以下の例は、各種条件をテストし、販売額がゼロまたは負の場合には0を返します。
IIF( SALES > 0, IIF( SALES < 50, SALARY1, IIF( SALES < 100, SALARY2, IIF( SALES < 200, SALARY3, BONUS))), 0 )
このロジックは、次のようにコメントを加えると読みやすくなります。
IIF( SALES > 0,
   --then test to see if sales is between 1 and 49:
      IIF( SALES < 50,
         --then return SALARY1
            SALARY1,
         --else test to see if sales is between 50 and 99:
            IIF( SALES < 100,
               --then return
                  SALARY2,
               --else test to see if sales is between 100 and 199:
                  IIF( SALES < 200,
                     --then return
                        SALARY3,
                     --else for sales over 199, return
                        BONUS)
                  )
           ),
   --else for sales less than or equal to zero, return
      0)
更新方式でIIFを使用します。以下に例を示します。
IIF( ISNULL( ITEM_NAME ), DD_REJECT, DD_INSERT)

IIFの代替手段

多くの場合、IIFの代わりにDECODEを使用します。DECODEを使うとコードが読みやすくなる場合があります。前節の最初の例でIIFの代わりにDECODEを使用すると、以下のようになります。
DECODE( TRUE,
   SALES > 0 and SALES < 50, SALARY1,
   SALES > 49 AND SALES < 100, SALARY2,
   SALES > 99 AND SALES < 200, SALARY3,
   SALES > 199, BONUS)