是否在NULLIF()中隐式计算了算术方程

Jef*_*ine 1 sql oracle nullif

我的SQL基础知识1考试指南指出,

select NULLIF(1234, 123+1) from dual;
Run Code Online (Sandbox Code Playgroud)

算术方程没有被隐含地评估......

然而,当我提交的结果下面的查询是null-它似乎是123 + 1 评价(虽然我知道查询是不同的).

select NULLIF(124, 123+1) from dual;
Run Code Online (Sandbox Code Playgroud)

那么,这是正确的(对于1Z0-051考试,无论如何)?表达式是否被评估?

Nic*_*nov 7

Nullif()函数计算两个参数,NULL如果argument1等于则返回argument2.在你的情况下123+1不等于1234.123+1等于124没有1234.

结果为null

它不能null在你的情况下.

SQL> select nullif(1234, 123+1) as res
   2    from dual;

       RES
----------
      1234



SQL> select nullif(1234, 1233+1) as res
  2    from dual
  3  ;

       RES
----------
 NULL
Run Code Online (Sandbox Code Playgroud)

关注:我的2美分

以上NULLIF等同于以下情况

CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END
Run Code Online (Sandbox Code Playgroud)

您不能NULL为第一个表达式指定文字.

也来自文档

如果两个参数都是数值数据类型,则Oracle数据库确定具有较高数字优先级的参数,隐式将另一个参数转换为该数据类型,并返回该数据类型.如果参数不是数字,则它们必须具有相同的数据类型,否则Oracle将返回错误.