DECODE函数根据参数的不同,既能实现IF-THEN-ELSE
分支选择的功能,也能实现将字符串按照指定的编码格式进行解码的功能。本文为您介绍不同功能的语法指令和对应场景的示例应用。
IF-THEN-ELSE
分支选择
命令格式
DECODE(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])
参数说明
参数 | 是否必填 | 说明 |
expression | 是 | 要比较的表达式。 |
search | 是 | 与expression进行比较的搜索项。 |
result | 是 | search和expression的值匹配时的返回值。 |
default | 否 | 如果所有的搜索项都不匹配,则返回default值,如果未指定,则返回NULL。 |
所有的result数据类型必须一致或为NULL。不一致的数据类型会返回报错。
所有的search和expression数据类型必须一致,否则会返回报错。
返回值说明
如果匹配,返回result。
如果没有匹配,返回default。
如果没有指定default,返回NULL。
如果search选项有重复且匹配时,会返回第一个值。
通常,MaxCompute SQL在计算
NULL=NULL
时返回NULL,但在该函数中,NULL与NULL的值是相等的。
使用示例
例如表sale_detail
的字段为shop_name string
,customer_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 |
+------------+-------------+-------------+------------+------------+
命令示例如下。
--当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类型。str或charset值为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分支选择
- 命令格式
- 参数说明
- 返回值说明
- 使用示例
- 将字符串按照指定格式进行解码
- 命令格式
- 参数说明
- 返回值说明
- 使用示例
- 相关函数