是否有与 Oracle 的 DECODE 函数等效的 ANSI SQL?
Oracle 的解码函数是 SQL 中的 IF-THEN-ELSE 构造。
CASE 表达式是 ANSI SQL 方法,其中有 2 个变体,“simple”和“searched”:
1) 简单的 CASE 表达式:
CASE col WHEN 1 THEN 'One'
WHEN 2 THEN 'Two'
ELSE 'More'
END
2) 搜索到的 CASE 表达式:
CASE WHEN col < 0 THEN 'Negative'
WHEN col = 0 THEN 'Zero'
ELSE 'Positive'
END
请注意,Oracle DECODE 将 null 视为等于 null,而 CASE(和任何其他比较)则不会。
示例:如果 a 和 b 均为空值,则 Decode(a,b,1,0) 将返回 1。
只需运行这 2 个语句即可查看差异。
select case null when null then 'Y' else 'N' end dd from dual;
select decode(null, null, 'Y', 'N') dd from dual;
CASE WHEN a=1 THEN value1
WHEN a=2 THEN value2
ELSE default
END
加起来 null 可以在解码中进行比较,而如果不是。