Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1699844
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-11-29 09:58:08

语法

nullif::=

功能

比较 expr1expr2 的值,若二者相等,则返回 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_VP
Hartstein                 MK_MAN
Kaufling                  ST_MAN
Kochhar                   AD_VP
Kochhar                   AD_VP
Raphaely                  PU_MAN
Taylor                    SA_REP
Taylor
Whalen                    AD_ASST
Whalen

阅读(2872) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~