全部產品
Search
文件中心

MaxCompute:DECODE

更新時間:Dec 06, 2025

DECODE函數根據參數的不同,既能實現IF-THEN-ELSE分支選擇的功能,也能實現將字串按照指定的編碼格式進行解碼的功能。本文為您介紹不同功能的文法指令和對應情境的樣本應用。

IF-THEN-ELSE分支選擇

命令格式

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

參數說明

參數

是否必填

說明

expression

要比較的運算式。

search

expression進行比較的搜尋項。

result

searchexpression的值匹配時的傳回值。

default

如果所有的搜尋項都不匹配,則返回default值,如果未指定,則返回NULL。

說明
  • 所有的result資料類型必須一致或為NULL。不一致的資料類型會返回報錯。

  • 所有的searchexpression資料類型必須一致,否則會返回報錯。

傳回值說明

  • 如果匹配,返回result

  • 如果沒有匹配,返回default

  • 如果沒有指定default,返回NULL。

  • 如果search選項有重複且匹配時,會返回第一個值。

  • 通常,MaxCompute SQL在計算NULL=NULL時返回NULL,但在該函數中,NULL與NULL的值是相等的。

使用樣本

例如表sale_detail的欄位為shop_name stringcustomer_id stringtotal_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   |
+------------+-------------+-------------+------------+------------+

命令樣本如下。

--當customer_id的值為c1時,返回Taobao;值為c2時,返回Alipay;值為c3時,返回Aliyun;值為NULL時,返回N/A;其他情境返回Others。
SELECT DECODE(customer_id, 'c1', 'Taobao', 'c2', 'Alipay', 'c3', 'Aliyun', Null, 'N/A', 'Others') AS RESULT FROM sale_detail;

--等效於如下語句。
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>)

參數說明

參數

是否必填

說明

str

BINARY類型,是待解碼的字串。

charset

STRING類型,編碼格式。取值範圍為:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。

說明

目前ISO-8859-1和US-ASCII編碼格式只支援對英文進行編碼或解碼,暫不支援中文。

傳回值說明

返回STRING類型。strcharset值為NULL時,返回NULL。

使用樣本

  • 樣本1:將字串“中文範例”按照UTF-8格式編碼。命令樣本如下。

    --編解碼
    SELECT DECODE(ENCODE("中文範例","UTF-8"), "UTF-8");

    返回結果如下。

    +-----+
    | _c0 |
    +-----+
    | 中文範例 |
    +-----+
  • 樣本2:任一輸入參數為NULL。命令樣本如下。

    SELECT DECODE(ENCODE("中文範例","UTF-8"), NULL);

    返回結果如下。

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

相關函數

DECODE函數既屬於其他函數,也屬於字串函數。更多其他業務情境的函數請參見其他函數,更多尋找字串、轉換字串格式的函數請參見字串函數