DECODE 関数
DECODE 式は、等価条件の結果に応じて、特定の値を別の特定の値またはデフォルト値で置換します。この演算は簡易 CASE 式または IF-THEN-ELSE ステートメントの演算と同じです。
構文
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
このタイプの式は、テーブルに格納されている略語またはコードを、レポートに必要な意味のあるビジネス値に置き換える場合に便利です。
パラメータ
- expression
-
テーブル内の列など、比較する値のソース。
- search (検索)
-
ソース式と比較されるターゲット値 (数値や文字列など)。検索式の結果は単一の固定値である必要があります。値の範囲 (
age between 20 and 29
など) を検証する式を指定することはできません。置換する値ごとに個別の検索/結果のペアを指定する必要があります。検索式のすべてのインスタンスのデータ型は、同じまたは互換性がある必要があります。expression および search パラメータも互換性のある必要があります。
- result
-
式が検索値を満たす場合、クエリが返す置換値。DECODE 式に少なくとも 1 の検索/結果のペアを含める必要があります。
結果式のすべてのインスタンスのデータ型は同じまたは互換性がある必要があります。result および default パラメータも互換性のある必要があります。
- デフォルト
-
検索条件が失敗した場合に使用されるオプションのデフォルト値。デフォルト値を指定しない場合、DECODE 式は NULL を返します。
使用に関する注意事項
expression 値と search 値が両方とも NULL の場合、DECODE 結果は対応する result の値になります。関数のこの使用方法の説明については、「例」のセクションを参照してください。
このように使用する場合、DECODE は「NVL2 関数」に似ていますが、いくつかの違いがあります。その違いについては、NVL2 の使用に関する注意事項を参照してください。
例
値 2008-06-01
が datetable の caldate 列に存在する場合、次の例ではこれが June 1st, 2008
に置換されます。この例では、他のすべての caldate 値が NULL に置き換えられます。
select decode(caldate, '2008-06-01', 'June 1st, 2008') from datetable where month='JUN' order by caldate; case ---------------- June 1st, 2008 ... (30 rows)
次の例では、DECODE 式を使用して、CATEGORY テーブルの 5 つの省略された CATNAME 列を完全名に変換し、列の他の値を Unknown
に変換します。
select catid, decode(catname, 'NHL', 'National Hockey League', 'MLB', 'Major League Baseball', 'MLS', 'Major League Soccer', 'NFL', 'National Football League', 'NBA', 'National Basketball Association', 'Unknown') from category order by catid; catid | case -------+--------------------------------- 1 | Major League Baseball 2 | National Hockey League 3 | National Football League 4 | National Basketball Association 5 | Major League Soccer 6 | Unknown 7 | Unknown 8 | Unknown 9 | Unknown 10 | Unknown 11 | Unknown (11 rows)
DECODE 式を使用して、VENUESEATS 列が NULL のコロラドとネバダの会場を検索して、NULL をゼロに変換します。VENUESEATS 列が NULL でない場合は、結果として 1 を返します。
select venuename, venuestate, decode(venueseats,null,0,1) from venue where venuestate in('NV','CO') order by 2,3,1; venuename | venuestate | case ------------------------------+----------------+----------- Coors Field | CO | 1 Dick's Sporting Goods Park | CO | 1 Ellie Caulkins Opera House | CO | 1 INVESCO Field | CO | 1 Pepsi Center | CO | 1 Ballys Hotel | NV | 0 Bellagio Hotel | NV | 0 Caesars Palace | NV | 0 Harrahs Hotel | NV | 0 Hilton Hotel | NV | 0 ... (20 rows)