DECODE スカラー関数

DECODE 関数は、それぞれの expression2expression1 と比較します。 expression1expression2 と等しいか、expression1expression2 の両方が NULL の場合、result-expression の値が返されます。 expression1 と一致する expression2 がない場合は、else-expression の値が返されます。 それ以外の場合は、NULL 値が返されます。

構文図を参照するビジュアルシンタックスダイアグラムをスキップするDECODE(expression1 ,expression2,結果式 ,他式 )

スキーマは SYSIBM です。

DECODE 関数は CASE 式と類似していますが、DECODE が NULL 値を処理する方法は異なります。

  • expression1 の NULL 値は、対応する expression2 の NULL 値と一致します。
  • NULL キーワードを DECODE 関数の引数として使用する場合、NULL キーワードは比較に適切なデータ・タイプにキャストされなければなりません。

DECODE の引数が配列値を表すことはできません。

DECODE 関数の結果タイプを決定する規則は、対応する CASE 式に基づきます。

以下の表に、同等の DECODE 関数と CASE 式を記載します。 DECODE 関数および対応する CASE 式が達成する結果は同じです。

表 1. 同等の DECODE 関数と CASE 式 (それぞれに同じ結果を返します)
DECODE 関数 CASE 式
DECODE(c1, 7, 'a', 
  6, 'b', 'c')
CASE c1
  WHEN 7 THEN 'a'
  WHEN 6 THEN 'b'
  ELSE 'c'
END
 
DECODE(c1, var1, 'a', 
  var2, 'b')
CASE
WHEN c1 = var1 OR 
	(c1 IS NULL AND 
    var1 IS NULL) THEN 'a'
WHEN c1 = var2 OR 
	(c1 IS NULL AND 
    var2 IS NULL) THEN 'b'
ELSE NULL
END
c1、var1、および var2 の値は、NULL 値にすることができます。
SELECT ID, DECODE(STATUS, 
     'A', 'Accepted',
      D', 'Denied',
CAST(NULL AS VARCHAR(1)), 
   'Unknown', 'Other')
FROM CONTRACTS
SELECT ID,
CASE
WHEN STATUS = 'A' 
  THEN 'Accepted'
WHEN STATUS = 'D' 
  THEN 'Denied'
WHEN STATUS IS NULL 
  THEN 'Unknown'
ELSE 'Other'
END
FROM CONTRACTS