概要
search と result の複数の組み合わせを、コンマで区切って指定できます。default を 1 つ指定できます。DECODE 式のパラメータ (expr、search、result、および default を含む) の最大数は、およそ 100 です。search、result、default の各値は、式から導き出すことができます。
DECODE 式を評価するために、InterSystems IRIS は expr を各 search 値と 1 つずつ比較します。
InterSystems IRIS が各 search 値を評価するのはそれを expr と比較する前だけで、すべての search 値を評価してから expr と比較されるわけではありません。したがって、InterSystems IRIS は、search が expr と一致した場合は、それ以降の search を評価しません。
DECODE 式では、InterSystems IRIS は 2 つの NULL を同等と見なします。expr が NULL の場合、InterSystems IRIS は、NULL である最初の search の result を返します。
DECODE は Oracle との互換性をサポートします。
返り値のデータ型
DECODE は、最初の result 引数のデータ型を返します。最初の result 引数のデータ型が特定されない場合、DECODE は VARCHAR を返します。数値の場合、DECODE は、可能なすべての result 引数値の中から、最大の長さ、有効桁数、および小数桁数を返します。
result および default のデータ型が異なる場合、返されるデータ型は可能なすべての返り値と最も互換性の高い型、つまり最も高いデータ型の優先順位を持つデータ型になります。例えば、result が整数で default が小数の場合、DECODE はデータ型 NUMERIC の値を返します。これは、NUMERIC が両方に互換性がある、最も高い優先順位を持つデータ型であるためです。
例
以下の例は、13 から 19 までの年齢を 'Teen' として "解読" します。default は 'Adult' です。
SELECT Name,Age,DECODE(Age,
13,'Teen',14,'Teen',15,'Teen',16,'Teen',
17,'Teen',18,'Teen',19,'Teen',
'Adult') AS AgeBracket
FROM Sample.Person
WHERE Age > 12
以下の例では、NULL をデコードします。FavoriteColors に値がない場合は、DECODE はそれを文字列 ‘No Preference’ に置換し、値がある場合は、FavoriteColors の値を返します。
SELECT Name,DECODE(FavoriteColors,
NULL,'No Preference',
$LISTTOSTRING(FavoriteColors,'^')) AS ColorPreference
FROM Sample.Person
ORDER BY Name
以下の例では、色の好みをデコードします。その人の好きな色が 1 つの場合は、色の名前が省略形に置き換えられます。好きな色が複数ある場合は、DECODE は FavoriteColors の値を返します。
SELECT Name,DECODE(FavoriteColors,
$LISTBUILD('Red'),'R',
$LISTBUILD('Orange'),'O',
$LISTBUILD('Yellow'),'Y',
$LISTBUILD('Green'),'G',
$LISTBUILD('Blue'),'B',
$LISTBUILD('Purple'),'V',
$LISTBUILD('White'),'W',
$LISTBUILD('Black'),'K',
$LISTTOSTRING(FavoriteColors,'^'))
FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
ORDER BY FavoriteColors
この ORDER BY 節では元のフィールド値で並べ替えているという点に注意してください。以下の例では、DECODE の値で並べ替えます。
SELECT Name,DECODE(FavoriteColors,
$LISTBUILD('Red'),'R',
$LISTBUILD('Orange'),'O',
$LISTBUILD('Yellow'),'Y',
$LISTBUILD('Green'),'G',
$LISTBUILD('Blue'),'B',
$LISTBUILD('Purple'),'V',
$LISTBUILD('White'),'W',
$LISTBUILD('Black'),'K',
$LISTTOSTRING(FavoriteColors,'^')) AS ColorCode
FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
ORDER BY ColorCode
以下の例は、Employee レコードの Company コード・フィールドの数値コードを解読し、対応する部署名を返します。従業員の Company コードが 1 から 10 までに該当しない場合、DECODE は既定の “Admin (non-tech)” を返します。
SELECT Name,
DECODE (Company,
1, 'TECH MARKETING', 2, 'TECH SALES', 3, 'DOCUMENTATION',
4, 'BASIC RESEARCH', 5, 'SOFTWARE DEVELOPMENT', 6, 'HARDWARE DEVELOPMENT',
7, 'QUALITY TESTING', 8, 'FIELD SUPPORT', 9, 'PHONE SUPPORT',
10, 'TECH TRAINING',
'Admin (non-tech)') AS TechJobs
FROM Sample.Employee
この式では、expr パラメータが Company で、search と result パラメータの 10 個の組み合わせが使用されています。"Admin (non-tech)" は default パラメータです。