功能比较 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这里没有明确提示 expr1 不能为 NULL,而是说类型不一致。那么换成一致的类型呢: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_VPHartstein MK_MANKaufling ST_MANKochhar AD_VPKochhar AD_VPRaphaely PU_MANTaylor SA_REPTaylorWhalen AD_ASSTWhalen
标签:sql