説明
この関数は、condition を各 search と順次比較し、比較結果を返します。
1つ以上の
searchがconditionの値と等しい場合、最初にconditionの値と等しいsearchの後に続くresultの値を返します。どの
searchもconditionと等しくない場合、パラメータdefaultの値を返します。パラメータdefaultの値が省略されている場合は、nullを返します。
構文
DECODE (condition, search, result [, search, result ...][, default])
パラメータの説明
condition、search、result、および default は、数値データ型(NUMBER、FLOAT、BINARY_FLOAT、または BINARY_DOUBLE)または文字データ型(CHAR、VARCHAR2、NCHAR、または NVARCHAR2)の値または式です。
注意
最初の result が数値データ型である場合、返される result または default も数値データ型でなければなりません。そうでない場合はエラーが発生します。
戻り値のタイプ
最初に
conditionの値と等しいsearchの後に続くresultのデータ型がCHAR、VARCHAR2、NCHAR、またはNVARCHAR2の場合、VARCHAR2データ型を返します。最初に
conditionの値と等しいsearchの後に続くresultのデータ型が数値データ型の場合、そのパラメータresultのデータ型を返します。すべての
searchがconditionと等しくない場合:パラメータ
defaultの値が省略されている場合、nullを返します。パラメータ
defaultのデータ型がCHAR、VARCHAR2、NCHAR、またはNVARCHAR2の場合、VARCHAR2データ型を返します。
例
DECODEを使用して、5*3-2と3*4-1の数値の大小を比較します。obclient> SELECT DECODE(SIGN((5*3-2)-(3*4-1)),0,'相等',1,'(5*3-2)大','(3*4-1)大') FROM DUAL; +----------------------------------------------------------------------+ | DECODE(SIGN((5*3-2)-(3*4-1)),0,'相等',1,'(5*3-2)大','(3*4-1)大') | +----------------------------------------------------------------------+ | (5*3-2)大 | +----------------------------------------------------------------------+ 1 row in setDECODE関数を使用して、データに文字Sが含まれているかどうかを確認します。obclient> SELECT DECODE(INSTR('CLARK','S'), 0, '不含有 S', '含有 S') "CLARK", DECODE(INSTR('KING','S'), 0, '不含有 S', '含有 S') "KING", DECODE(INSTR('MILLER','S'), 0, '不含有 S', '含有 S') "MILLER", DECODE(INSTR('ADAMS','S'), 0, '不含有 S', '含有 S') "ADAMS", DECODE(INSTR('FORD','S'), 0, '不含有 S', '含有 S') "FORD", DECODE(INSTR('JONES','S'), 0, '不含有 S', '含有 S') "JONES" FROM DUAL; +-------------+-------------+-------------+----------+-------------+----------+ | CLARK | KING | MILLER | ADAMS | FORD | JONES | +-------------+-------------+-------------+----------+-------------+----------+ | 不含有 S | 不含有 S | 不含有 S | 含有 S | 不含有 S | 含有 S | +-------------+-------------+-------------+----------+-------------+----------+ 1 row in set