跳到主要内容

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真题

交流微信二维码

你可能还想看