题
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返回错误。
不隶属于 StackOverflow