看起来简单的CASE表达式和DECODE函数是等价的,并且它们返回的结果应该是相同的.是吗?
该文档有关于简单CASE表达式的以下内容:
简单的CASE表达式返回selector_value与selector匹配的第一个结果.不评估剩余表达式.如果没有selector_value与selector匹配,则CASE表达式返回else_result(如果存在),否则返回NULL.
将其与DECODE函数进行比较,描述似乎相同.
DECODE将expr逐个与每个搜索值进行比较.如果expr等于搜索,则Oracle数据库返回相应的结果.如果未找到匹配项,则Oracle返回默认值.如果省略default,则Oracle返回null.
由于搜索到的CASE表达式可以等同于简单,因此可以将其解释为相同.
这三个陈述似乎都返回相同的结果,0.
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
Run Code Online (Sandbox Code Playgroud)
简单的CASE表达式和DECODE函数(以及在特定情况下搜索的CASE表达式)是否总是返回相同的结果?