DECODE

構文

目的

DECODEは、exprを各search値と1つずつ比較します。exprsearchと等しい場合、Oracle Databaseは対応するresultを戻します。一致する値が見つからない場合は、defaultを戻します。defaultが省略されている場合は、NULLを戻します。

引数は、任意の数値型(NUMBERBINARY_FLOATBINARY_DOUBLE)または文字列型です。

  • exprおよびsearchが文字データである場合、Oracleは、非空白埋め比較セマンティクスを使用してそれらを比較します。exprsearchおよびresultのデータ型は、CHARVARCHAR2NCHARまたはNVARCHAR2です。戻される文字列は、VARCHAR2データ型で、最初のresultパラメータと同じ文字セットの文字列です。

  • 最初のsearch-resultの組が数値である場合、Oracleはすべてのsearch-resultの式と最初のexprを比較して、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

searchresultおよびdefaultの各値は式から派生できます。Oracle Databaseでは、短絡評価を使用します。データベースは、search値のいずれかとexprを比較する前にすべてのsearch値を評価するのではなく、各search値とexprを比較する前にのみ、各search値を評価します。その結果、exprと等しいsearchが見つかると、Oracleはその後のsearchを評価しません。

比較する前に、Oracleはexprと各search値を、最初のsearch値のデータ型に自動的に変換します。Oracleは、戻り値を最初のresultと同じデータ型に自動的に変換します。最初のresultのデータ型がCHARの場合、または最初のresultがNULLの場合、Oracleは戻り値をVARCHAR2データ型の値に変換します。

DECODEファンクションでは、Oracleは2つのNULLを同等とみなします。exprがNULLの場合、Oracleは最初のsearch値のresultもNULLとして戻します。

DECODEファンクションのコンポーネントの最大数は、exprsearchresultdefaultを含めて255です。

関連項目:

この例では、warehouse_idの値をデコードします。warehouse_idが1の場合「Southlake」を、warehouse_idが2の場合は「San Francisco」を戻します。warehouse_idが1、2、3、4のいずれでもない場合、ファンクションは「Non domestic」を戻します。

SELECT product_id,
       DECODE (warehouse_id, 1, 'Southlake', 
                             2, 'San Francisco', 
                             3, 'New Jersey', 
                             4, 'Seattle',
                                'Non domestic') "Location" 
  FROM inventories
  WHERE product_id < 1775
  ORDER BY product_id, "Location";