select case 1 when 2 then null else 0 end as simple_case case when 1 = 2 then null else 0 end as searched_case decode(1,2,null,0) as decode from dual2 E) F H8 `& C
简单的 CASE 表达式和 DECODE 函数(以及在特定情况下搜索的 CASE 表达式)是否总是回到相同的结果? . @$ |" J5 J" n$ t : L+ x0 F* Z. z2 {; L% f. {1 Z 解决方案: & z- g$ A# e; ?/ e* L Ben 写了一篇关于 DECODE 和 CASE 差异的冗长答案。他演示了 DECODE 和 CASE 可能会在没有正确解释为什么会发生这种情况的情况下,将不同的数据类型返回到明显相同的组值。7 q4 X" ]% I# P/ z5 W: u
DECODE() 非常规范:它一直是第一个结果数据类型的参数。Oracle 将隐式转换应用于所有其他结果参数。如果(如)第一个结果参数是数字,默认值是日期,则会出错。 & r% i. D; |+ X2 M1 B' a/ D
ORA-00932: inconsistent datatypes: expected NUMBER got DATE " X- M8 N9 P0 J