DECODE

更新时间:2025-02-14 05:23:12

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,但在该函数中,NULLNULL的值是相等的。

使用示例

例如表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-1US-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函数既属于其他函数,也属于字符串函数。更多其他业务场景的函数请参见其他函数,更多查找字符串、转换字符串格式的函数请参见字符串函数

  • 本页导读 (1)
  • IF-THEN-ELSE分支选择
  • 命令格式
  • 参数说明
  • 返回值说明
  • 使用示例
  • 将字符串按照指定格式进行解码
  • 命令格式
  • 参数说明
  • 返回值说明
  • 使用示例
  • 相关函数