1

My SQL Fundamentals 1 Exam Guide 指出,

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

算术方程没有被隐式评估......

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

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

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

4

1 回答 1

7

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

结果为空

它不可能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 会返回错误。

于 2014-01-10T12:11:50.737 回答