更新时间:2023-10-25 GMT+08:00

decode1

decode1函数实现if-then-else分支选择的功能。

命令格式

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

参数说明

表1 参数说明

参数

是否必选

参数类型

说明

expression

所有数据类型。

要比较的表达式。

search

与expression一致。

与expression进行比较的搜索项。

result

所有数据类型。

search和expression的值匹配时的返回值。

default

与result一致。

如果所有的搜索项都不匹配,则返回default值,如果未指定,则返回NULL。

返回值说明

result 和 default 为返回值,支持返回所有的数据类型。

  • 如果匹配,返回result。
  • 如果没有匹配,返回default。
  • 如果没有指定default,返回NULL。
  • 如果search选项有重复且匹配时,会返回第一个值。

示例代码

为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表salary,并添加数据,命令示例如下:
CREATE EXTERNAL TABLE salary (
dept_id STRING, -- 部⻔
userid string, -- 员⼯ID
sal INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
stored as textfile;

添加数据如下:

d1,user1,1000
d1,user2,2000
d1,user3,3000
d2,user4,4000
d2,user5,5000

示例

返回每个部门的名称

当 dept_id 的值为d1时,返回DLI;值为d2时,返回MRS;其他场景返回Others。

select dept, decode1(dept, 'd1', 'DLI', 'd2', 'MRS', 'Others') as result from sale_detail;

返回结果:

d1 DLI
d2 MRS
d3 Others
d4 Others
d5 Others