My SQL Fundamentals 1考试指南指出,
select NULLIF(1234, 123+1) from dual;
算术方程式未被隐式评估......
但是,当我在下面提交查询时,结果为null
- 似乎评估了123 + 1 (虽然我知道查询不同)。
select NULLIF(124, 123+1) from dual;
那么,这是正确的(对于1Z0-051考试,无论如何)?是否评估了表达式?
答案 0 :(得分:7)
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
。
同样来自documentation
如果两个参数都是数值数据类型,那么Oracle数据库 隐式地确定具有更高数字优先级的参数 将另一个参数转换为该数据类型,并返回该参数 数据类型。如果参数不是数字,那么它们必须是 相同的数据类型,或Oracle返回错误。