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

MaxCompute:DECODE

最終更新日:Nov 10, 2025

パラメーターに基づいてさまざまな機能を実装します。 DECODE関数を使用して、IF-THEN-ELSEの分岐選択を実装できます。 DECODE関数を使用して、指定したエンコード形式に基づいて文字列をデコードすることもできます。 このトピックでは、関連するシナリオの機能とアプリケーション例の構文について説明します。

IF-THEN-ELSEブランチ選択を実装する

構文

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

Parameters

パラメーター

必須 / 任意

説明

expression

はい

比較する式。The expression that you want to compare.

search

はい

と比較する検索項目。

result

はい

searchexpressionの値が一致する場合に返される値。

default

いいえ

式に一致する検索項目がない場合、defaultの値が返されます。 このパラメーターを指定しない場合、NULLが返されます。

説明
  • NULL値を除いて、resultパラメーターの他のすべての値は同じデータ型でなければなりません。 値が異なるデータ型の場合、エラーが返されます。

  • searchexpressionの値は同じデータ型である必要があります。 それ以外の場合は、エラーが返されます。

戻り値

  • 検索項目が式と一致する場合、resultの値が返されます。

  • 式に一致する検索項目がない場合、defaultの値が返されます。

  • defaultパラメーターに値が指定されていない場合、NULLが返されます。

  • 重複した検索アイテムが式と一致する場合、最初の検索アイテムの結果値が返されます。

  • ほとんどの場合、MaxCompute SQLがNULL=NULLを計算すると、戻り値はNULLになります。 ただし、DECODE関数は、2つのNULL値が同じであると見なします。

sale_detailテーブルには、shop_name STRINGcustomer_id STRING、およびtotal_price DOUBLE列が含まれます。 このテーブルには、次のデータが含まれます。

+------------+-------------+-------------+------------+------------+
| 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   |
+------------+-------------+-------------+------------+------------+

サンプル文:

-- If the value of customer_id is c1, the return value is Taobao. If the value is c2, the return value is Alipay. If the value is c3, the return value is Aliyun. If the value is NULL, the return value is N/A. In other cases, the return value is Others. 
SELECT DECODE(customer_id, 'c1', 'Taobao', 'c2', 'Alipay', 'c3', 'Aliyun', Null, 'N/A', 'Others') AS RESULT FROM sale_detail;

-- The preceding statement is equivalent to the following statement: 
IF customer_id = c1 THEN RESULT := 'Taobao';
ELSEIF customer_id = c2 THEN RESULT := 'Alipay';
ELSEIF customer_id = c3 THEN RESULT := 'Aliyun';  ...
ELSE RESULT := 'Others';
END IF;

次の応答が返されます。

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

指定されたエンコード形式に基づいて文字列をデコードする

構文

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

Parameters

パラメーター

必須 / 任意

説明

str

はい

デコードする文字列。 文字列はBINARY型です。

charset

はい

エンコード形式。 値はSTRING型です。 有効な値: 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形式に基づいて文字列English Sampleをエンコードおよびデコードします。 例:

    -- Encode and decode the string.
    SELECT DECODE(ENCODE("English Sample","UTF-8"), "UTF-8");

    次の応答が返されます。

    +-----+
    | _c0 |
    +-----+
    | English Sample |
    +-----+
  • 例2: 入力パラメーターのいずれかをNULLに設定します。 例:

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

    次の応答が返されます。

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

関連関数

DECODE関数は、他の関数と文字列関数の両方に属します。 詳細については、「その他の関数」および「文字列関数」をご参照ください。