更新时间:2026-07-03 GMT+08:00
分享

decode1

功能描述

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

命令格式

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

参数说明

参数

是否必选

参数类型

说明

expression

所有数据类型

要比较的表达式。

search

与expression一致

与expression进行比较的搜索项。

result

所有数据类型

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

default

与result一致

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

返回值说明

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

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

示例代码

为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表salary,并添加数据,命令示例如下:

CREATE EXTERNAL TABLE IF NOT EXISTS salary (
   dept_id STRING,  -- 部门ID
   userid STRING,   -- 员工ID
   sal INT          -- 工资
)
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORED AS TEXTFILE 
LOCATION 'obs://your-bucket-name/aidatalake/salary/';-- 【必填】替换为OBS桶路径(平台外表时必须指定)

添加数据如下:

INSERT INTO salary VALUES
('d1','user1',1000), 
('d1','user2',2000), 
('d1','user3',3000), 
('d2','user4',4000), 
('d2','user5',5000), 
('d3','user6',6000), 
('d4','user7',7000), 
('d5','user8',8000); 

回显结果

返回每个部门的名称

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

select dept_id,  
decode1(dept_id, 'd1', '平台', 'd2', 'MRS', 'Others') as result from salary 
GROUP BY dept_id;  -- 按部门ID去重,确保每个部门仅返回一行

返回结果:

+-----+-------+
| dept_id| result| 
+-----+-------+
|   d1|    平台| 
|   d2|    MRS| 
|   d3| Others| 
|   d4| Others| 
|   d5| Others| 
+-----+-------+

相关文档