case:条件分支判断
速查结论
CASE expr1 WHEN expr2 THEN expr3 [WHEN expr4 THEN expr5] [ELSE expr6] END* 是 Spark SQL 中用于根据条件匹配返回不同分支结果的表达式。
语法
CASE expr1 WHEN expr2 THEN expr3 [WHEN expr4 THEN expr5]* [ELSE expr6] END
参数说明
| 参数 | 说明 |
|---|---|
| expr1 | 用于比较的一个操作数表达式。 |
| expr2, expr4 | 每个都是与 expr1 进行比较的另一个操作数表达式。 |
| expr3, expr5, expr6 | 分支值表达式和 else 值表达式,应该是相同类型或可以强制转换为共同类型。 |
返回说明
当 expr1 等于 expr2 时,返回 expr3;当 expr1 等于 expr4 时,返回 expr5;否则返回 expr6(如有 ELSE 分支),若无匹配且无 ELSE 则返回 NULL。
示例
> SELECT CASE col1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE '?' END FROM VALUES 1, 2, 3;
one
two
?
> SELECT CASE col1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' END FROM VALUES 1, 2, 3;
one
two
NULL
常见报错与避坑指南
- 缺少 ELSE 返回 NULL:如果所有 WHEN 分支都不匹配且没有 ELSE 子句,CASE 表达式返回 NULL,注意处理此场景。
- 类型不匹配:各分支返回值的类型应保持一致或可隐式转换,否则可能导致运行时错误或意外类型提升。
Since: 1.0.1
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
