すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:DECODE

最終更新日:Mar 26, 2026

DECODE は、そのシグネチャに応じて 2 つの異なる目的を果たします:

  • DECODE(expression, search, result[, ...][, default]) — 式を結果値にマップします。これは IF-THEN-ELSE チェーンに相当します。

  • STRING DECODE(BINARY str, STRING charset) — 指定されたエンコーディングを使用してバイナリ値を文字列に変換します。

IF-THEN-ELSE 分岐選択

構文

DECODE(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])

パラメーター

パラメーター必須説明
expressionはい選択式。各 search 値はこの式と比較されます。
searchはいexpression と比較する検索式。この値が expression と一致する場合、対応する result が返されます。複数の search が一致する場合、最初に一致した結果のみが返されます。
resultはい対応する search が expression と一致した場合に返される値。NULL でない result 値はすべて同じデータの型である必要があります。そうでない場合、エラーが返されます。
defaultいいえどの search も expression と一致しない場合に返される値。指定しない場合、デフォルトで NULL になります。
標準 SQL の CASE 式では NULL = NULL が false として扱われますが、DECODE は 2 つの NULL 値を等しいと見なします。NULL の expression は NULL の search 値と一致し、対応する result を返します。

戻り値

一致する search が見つかった場合は result を返し、一致が見つからない場合は default を返し、default が指定されていない場合は NULL を返します。

search と expression の値は同じデータの型である必要があります。そうでない場合、エラーが返されます。

例

次の例では、sale_detail テーブルを使用します:

+------------+-------------+-------------+------------+------------+
| shop_name  | customer_id | total_price | sale_date  | region     |
+------------+-------------+-------------+------------+------------+
| s1         | c1          | 100.1       | 2013       | china      |
| s2         | c2          | 100.2       | 2013       | china      |
| s3         | c3          | 100.3       | 2013       | china      |
| null       | c5          | NULL        | 2014       | shanghai   |
| s6         | c6          | 100.4       | 2014       | shanghai   |
| s7         | c7          | 100.5       | 2014       | shanghai   |
+------------+-------------+-------------+------------+------------+

例 1: デフォルト値で値をマップする

customer_id をラベルにマップし、認識されない値には Others を返します。NULL の customer_id は NULL の検索値と一致し、N/A を返します。

SELECT DECODE(customer_id,
              'c1', 'Taobao',
              'c2', 'Alipay',
              'c3', 'Aliyun',
              NULL, 'N/A',
              'Others') AS result
FROM sale_detail;

結果:

+------------+
| result     |
+------------+
| Others     |
| Others     |
| Others     |
| Taobao     |
| Alipay     |
| Aliyun     |
+------------+

例 2: デフォルトを省略する

default が省略され、一致する search がない場合、DECODE は NULL を返します。

SELECT DECODE(customer_id,
              'c1', 'Taobao',
              'c2', 'Alipay',
              'c3', 'Aliyun') AS result
FROM sale_detail;

結果:

+------------+
| result     |
+------------+
| Taobao     |
| Alipay     |
| Aliyun     |
| NULL       |
| NULL       |
| NULL       |
+------------+

customer_id の値が c5、c6、c7 の行には、一致する search エントリがないため、NULL が返されます。

エンコード形式による文字列のデコード

構文

STRING DECODE(BINARY <str>, STRING <charset>)

パラメーター

パラメーター必須説明
strはいデコードするバイナリ値。BINARY 型である必要があります。
charsetはい使用する文字コード。有効な値: UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。ISO-8859-1 と US-ASCII は英字のみをサポートします。

戻り値

STRING 型の値を返します。str または charset が NULL の場合、NULL を返します。

例

例 1: UTF-8 で文字列をエンコードおよびデコードする

SELECT DECODE(ENCODE("English Sample", "UTF-8"), "UTF-8");

結果:

+-----------------+
| _c0             |
+-----------------+
| English Sample  |
+-----------------+

例 2: NULL パラメーター

いずれかのパラメーターが NULL の場合、結果は NULL になります。

SELECT DECODE(ENCODE("English Sample", "UTF-8"), NULL);

結果:

+------+
| _c0  |
+------+
| NULL |
+------+

関連関数

DECODE は、その他の関数と文字列関数の両方のカテゴリに属します。関連する関数の完全なリストについては、「その他の関数」と「文字列関数」をご参照ください。