Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

DECODE

与えられた式を評価し、指定された値を返す関数です。

Synopsis

DECODE(expr {,search,result}[,default])

引数

expr 解読される式。
search expr が比較される対象値。
result exprsearch と一致する場合に返される値。
default オプションexprsearch と一致しない場合に返される既定値。

概要

searchresult の複数の組み合わせを、コンマで区切って指定できます。default を 1 つ指定できます。DECODE 式のパラメータ (exprsearchresult、および default を含む) の最大数は、およそ 100 です。searchresultdefault の各値は、式から導き出すことができます。

DECODE 式を評価するために、Caché は expr を各 search 値と 1 つずつ比較します。

  • exprsearch 値と等しい場合は、対応する result が返されます。

  • expr がどの search 値とも等しくない場合は、default 値が返されます。default が省略されている場合は、NULL が返されます。

Caché が各 search 値を評価するのはそれを expr と比較する前だけで、すべての search 値を評価してから expr と比較されるわけではありません。したがって、Caché は、searchexpr と一致した場合は、それ以降の search を評価しません。

DECODE 式では、Caché は 2 つの NULL を同等と見なします。expr が NULL の場合、Caché は、NULL である最初の searchresult を返します。

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 で、searchresult パラメータの 10 個の組み合わせが使用されています。"Admin (non-tech)" は default パラメータです。

関連項目

FeedbackOpens in a new tab