全部博文(136)
分类: Oracle
2008-11-29 09:58:08
nullif::=
比较 expr1 和 expr2
的值,若二者相等,则返回 NULL,否则返回 expr1 的值。其中 expr1 不能为
NULL。
NULLIF 函数在逻辑上相当于下面的 CASE
语句:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
SQL> select nullif('yct','tyc') from dual;
NUL
--- yct SQL> select nullif('yct','yct') from dual;
NUL --- |
expr1 和 expr2 的类型必须一致,否则会提示错误,因为无法比较二者是否相等:
SQL> select nullif('yct',sysdate) from dual; select nullif('yct',sysdate) from dual * ERROR 位于第 1 行: ORA-00932: 不一致的数据类型: 要求 CHAR 得到的却是 DATE |
当 expr1 为 NULL 时,该函数提示错误:
SQL> select nullif(null,'adf') from dual; select nullif(null,'adf') from dual * ERROR 位于第 1 行: ORA-00932: 不一致的数据类型: 要求 - 得到的却是 CHAR |
SQL> select nullif(null,null) from dual; select nullif(null,null) from dual * ERROR 位于第 1 行: ORA-00932: 不一致的数据类型: 要求 - 得到的却是 CHAR |
仍然会有这样的提示,不太明确。总之,expr1 是不能为 NULL 的。
下面的这个例子中,将查询哪个员工换了工作。表 job_history 中存储员工的历史工作记录,表 employees 中存储员工当前的工作记录:
SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID"
FROM employees e, job_history j WHERE e.employee_id = j.employee_id ORDER BY last_name; LAST_NAME Old Job ID ------------------------- ---------- De Haan AD_VP Hartstein MK_MAN Kaufling ST_MAN Kochhar AD_VP Kochhar AD_VP Raphaely PU_MAN Taylor SA_REP Taylor Whalen AD_ASST Whalen |