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

select NULLIF(1234, 123+1) from dual;

算术方程不是隐式求值的...

但是,当我提交下面的查询时,结果是 null - 好像是123+1 评估(尽管我知道查询是不同的)。

select NULLIF(124, 123+1) from dual;

那么,哪个是正确的(无论如何,对于 1Z0-051 考试)?表达式是否被求值?

有帮助吗?

解决方案

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

结果为空

它不可能是 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

跟进: 我的2分钱

以上 NULLIF 相当于下面的情况

CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END

您不能指定文字 NULL 对于第一个表达式。

也来自 文档

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top