Snowflake中以下两段CASE WHEN语句是否等价?
Snowflake两段CASE表达式逻辑等价性判定
这两段语句不具备等价执行逻辑,输出结果和语句作用都存在明确差异。
两段语句的实际执行逻辑
Case1 逻辑
Case1是一个独立的CASE计算表达式,分支规则如下:
- 当
VAL值为'ABC'时,返回结果'ALPHA' - 当
VAL值为'123'时,返回结果'NUMERIC' - 其余所有取值场景,返回结果
'ALPHANUMERIC'
对应代码:
CASE when VAL='ABC' then 'ALPHA' when VAL='123' then 'NUMERIC' else 'ALPHANUMERIC' end;
Case2 逻辑
Case2是一段赋值语句,会把内部嵌套CASE的计算结果赋值给VOBJECTDESCRIPTION字段/变量,分支规则如下:
- 当
VAL值为'ABC'时,返回结果'ALPHA' - 当
VAL值为'123'时,返回结果'ALPHA'(此处返回值和Case1存在明显偏差) - 其余所有取值场景,返回结果
'ALPHANUMERIC'
对应代码:
VOBJECTDESCRIPTION = CASE WHEN VAL='ABC' THEN 'ALPHA' ELSE CASE WHEN VAL='123' THEN 'ALPHA' ELSE 'ALPHANUMERIC' END END;
核心差异汇总
- 返回值差异:针对
VAL='123'的场景,Case1返回NUMERIC,Case2返回ALPHA,这是最核心的逻辑偏差,直接导致相同输入下输出结果不同 - 语句作用差异:Case1只是单独的计算表达式,不会修改任何字段/变量值;Case2是赋值语句,会把计算结果写入
VOBJECTDESCRIPTION
验证样例:取VAL值为
'123'测试,Case1输出NUMERIC,Case2输出ALPHA,二者结果完全不匹配。
如果要让Case2和Case1逻辑完全一致,只需要把嵌套CASE中VAL='123'对应的返回值修改为'NUMERIC'即可,修正后嵌套写法和Case1的平级WHEN写法在Snowflake中执行效率没有区别,仅为代码风格差异。
内容的提问来源于stack exchange,提问作者shivani bist
相关产品推荐
相关产品推荐

