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

多CASE条件执行报invalid number错误,满足首条件仍需额外CASE?

问题原因解析

你的问题核心在于数据库SQL的表达式求值顺序:数据库会先计算CASE语句中所有分支的表达式,再根据条件判断返回哪个分支的结果,而非先判断条件再执行对应分支的表达式。

原SQL报错的具体原因

在你的原SQL中,即使第一个WHEN MAX(...) = 9999的条件成立(因为存在DRR='80+',对应的CASE返回9999,MAX结果就是9999),数据库依然会提前计算ELSE分支里的两个TO_NUMBER(substr(...))表达式:

  • 当处理DRR='80+'这条记录时,INSTR(d.DRR, '-')返回0(字符串里没有'-'),substr(d.DRR, INSTR(...) +1)会取整个字符串'80+',用TO_NUMBER转换这个包含非数字字符的字符串,直接触发invalid number错误。

添加额外CASE后正常运行的原因

你添加的额外CASE,在转换数字前先对特殊值('CURR'、'80+')做了判断,给这些情况返回合法的数字(0或1),避免了对非数字字符串执行TO_NUMBER转换,所以不会触发错误。

验证逻辑

拿你的数据集举例:

  • 原SQL执行时,不管第一个WHEN是否满足,都会尝试对'80+'执行TO_NUMBER(substr('80+', 0+1)),也就是TO_NUMBER('80+'),必然报错。
  • 加了CASE判断后,处理'80+'时会直接返回1,跳过TO_NUMBER(substr(...))的转换,自然不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:17:29