You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL中Case When的Else分支是否被忽略?为何我的Else分支不生效?

问题分析与解决方案

我看了你的代码和示例数据,先帮你拆解下当前逻辑的执行结果,你就能明白为什么会觉得Else分支“不生效”了。

首先,你的CASE条件是:mod(Id,10) < (Id/10),也就是个位数字 < 十位数字时返回原数,否则返回数字反转。我们用你的示例数据跑一遍实际执行情况:

Id个位数字(mod结果)十位数字(Id/10取整)条件是否成立最终返回值
2112是21
1221否21
3443否43
4334是43
2992否92
9229是92

你觉得Else分支不生效,大概率是你的条件逻辑和预期需求搞反了:

  • 如果你希望当个位数字 > 十位数字时返回原数,否则反转,那你的条件应该写成mod(Id,10) > (trunc(Id/10));
  • 如果你确实是想让“个位<十位时返回原数,否则反转”,那当前代码本身是没问题的——比如Id=12、34、29都走了Else分支,返回的是反转后的数字,只是你可能误解了某些数据的执行分支。

另外补充一个细节:在部分数据库中,整数除法Id/10可能返回浮点数(比如PostgreSQL),虽然你用cast转成number(5)没问题,但更稳妥的方式是用整数截断函数,比如Oracle的trunc(Id/10),避免浮点数带来的潜在问题。

修正后的代码(假设你希望个位>十位时返回原数,否则反转)

select 
    Id, 
    case 
        when mod(Id,10) > trunc(Id/10) then Id  -- 直接返回原数,无需拼接
        else mod(Id,10)*10 + trunc(Id/10) 
    end Col 
from Test;

内容的提问来源于stack exchange,提问作者aprkturk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:58