説明
この関数は、condition を各 search と順次比較し、比較結果を返します。
一つ以上の
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