値を比較し別の値に変換します。
DECODEは、変換対象値式と各検索値の値を1つずつ比較し、変換対象値式と検索値とが一致する場合は対応する結果値を返却します。変換対象値式と検索値のすべてが一致しないとき、省略値が指定されている場合は省略値を返却し、省略値が指定されていない場合はNULL値を返却します。
検索値に同じ値が指定されている場合は、最初に出現した検索値に対応する結果値を返却します。
結果値と省略値において、使用できるデータ型は以下のとおりです。
CHAR
VARCHAR
NCHAR
NCHAR VARYING
TEXT
INTEGER
BIGINT
NUMERIC
DATE
TIME WITHOUT TIME ZONE
TIMESTAMP WITHOUT TIME ZONE
TIMESTAMP WITH TIME ZONE
変換対象値式と各検索値のデータ型はすべて同じデータ型を指定してください。ただし、検索値に定数を指定した場合、変換対象値式に対して変換可能なデータ型であれば、同じデータ型以外でも指定可能です。検索値に定数を指定した場合の指定可能なデータ型は、“A.3 暗黙の型変換”の“表A.1 定数を含む暗黙の型変換可能なデータ型の組合せ”を参照してください。
結果値と省略値がすべて定数の場合、結果値と省略値は以下のデータ型になります。
すべて文字列定数の場合、すべて文字列型になります。
数定数が1つ以上ある場合、すべて数値型になります。
日時/時刻型にキャストした定数が1つ以上ある場合、すべて日時/時刻型になります。
結果値と省略値に、定数と非定数が混在している場合、定数は非定数のデータ型に型変換します。変換可能なデータ型は、“A.3 暗黙の型変換”の“表A.1 定数を含む暗黙の型変換可能なデータ型の組合せ”を参照してください。
結果値と省略値のデータ型はすべて同じデータ型を指定してください。ただし、結果値と他の結果値または省略値のデータ型が変換可能なデータ型であれば、同じデータ型でなくても指定することができます。変換可能なデータ型は、以下のとおりです。
他の結果値または省略値 | ||||
---|---|---|---|---|
数値型 | 文字列型 | 日付/時刻型 | ||
任意の結果値 | 数値型 | ○ | × | × |
文字列型 | × | ○ | × | |
日付/時刻型 | × | × | △(注) |
○:型変換可能
△:一部型変換可能
×:型変換不可能
注) 日付/時刻型に関して型変換が可能なデータ型について説明します。
他の結果値または省略値 | |||||
---|---|---|---|---|---|
DATE | TIME WITHOUT TIME ZONE | TIMESTAMP WITHOUT TIME ZONE | TIMESTAMP WITH TIME ZONE | ||
任意の結果値 | DATE | ○ | × | ○ | ○ |
TIME WITHOUT TIME ZONE | × | ○ | × | × | |
TIMESTAMP WITHOUT TIME ZONE | ○ | × | ○ | ○ | |
TIMESTAMP WITH TIME ZONE | ○ | × | ○ | ○ |
○:型変換可能
×:型変換不可能
戻り値は、結果値や省略値のうち最大の長さや精度を持つデータ型になります。
例
次の例では、表t1のcol3の値を比較し別の値に変換します。col3の値が検索値1と一致する場合、結果値として「one」を返却します。col3の値が検索値1、2、3のいずれとも一致しない場合、省略値である「other number」を返却します。
SELECT col1, DECODE(col3, 1, 'one', 2, 'two', 3, 'three', 'other number') "num-word" FROM t1; col1 | num-word ------+---------- 1001 | one 1002 | two 1003 | three (3 rows)