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 dual$ Q+ Y: z2 c3 C3 Q4 o
简单的 CASE 表达式和 DECODE 函数(以及在特定情况下搜索的 CASE 表达式)是否总是回到相同的结果?! j1 i# s" T4 q8 v
; y' u$ q# v; l解决方案: 4 A, t2 u9 ?. W; K Ben 写了一篇关于 DECODE 和 CASE 差异的冗长答案。他演示了 DECODE 和 CASE 可能会在没有正确解释为什么会发生这种情况的情况下,将不同的数据类型返回到明显相同的组值。 Y5 w0 m, p+ b9 n4 ]
DECODE() 非常规范:它一直是第一个结果数据类型的参数。Oracle 将隐式转换应用于所有其他结果参数。如果(如)第一个结果参数是数字,默认值是日期,则会出错。 6 S' r- e0 q9 k5 T, `' Q5 C
ORA-00932: inconsistent datatypes: expected NUMBER got DATE' c( O, E; {: L$ P$ n2 V0 W