目次

Search

  1. はじめに
  2. トランスフォーメーション言語
  3. 定数
  4. 演算子
  5. 変数
  6. 日付
  7. 関数
  8. カスタム関数の作成
  9. カスタム関数APIリファレンス

トランスフォーメーション言語リファレンス

トランスフォーメーション言語リファレンス

IIF

IIF

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

構文

IIF(
condition
,
value1
[,
value2
] )
以下の表に、このコマンドの引数を示します。
引数
必須/
オプション
説明
condition
必須
値を求める条件。TRUEまたはFALSEになる有効なトランスフォーメーション式を必要に応じて入力できます。
value1
必須
任意のデータ型(Binaryを除く)。条件がTRUEのときに返したい値。戻り値は常にこの引数で指定したデータ型になります。有効なトランスフォーメーション式(別のIIF式を含む)を必要に応じて入力できます。
value2
オプション
任意のデータ型(Binaryを除く)。条件がFALSEのときに返したい値。有効なトランスフォーメーション式(別のIIF式を含む)を必要に応じて入力できます。
一部のシステムで使用される条件関数と異なり、IIF関数ではFALSE条件(
value2
)は必須ではありません。
value2
を省略すると、関数は条件がFALSEのときに以下の値を返します。
  • >value</1>が数値データ型のときは、0。
  • >value</1>が文字列データ型のときは、空文字列。
  • >value</1>がDate/Timeデータ型のときは、NULL。
例えば、下記の式にはFALSE条件が含まれず、
value1
は文字列データ型であるため、
PowerCenter統合サービス
は、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が含まれるため、
PowerCenter統合サービス
は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
データにマルチバイト文字が含まれ、条件引数で文字列データを比較する場合、
PowerCenter統合サービス
のコードページとデータ移動モードに応じた戻り値が返されます。

IIFとデータ型

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

IIFの特殊な使用法

ネストしたIIF文を使用して、複数の条件をテストできます。以下の例は、各種条件をテストし、販売額が0または負の場合には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)
また、IIFの代わりにFilterトランスフォーメーションを使用してセッションのパフォーマンスを向上できる場合もよくあります。