説明
この関数は、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