随笔-42  评论-12  文章-0  trackbacks-0
处理NULL值:
查询一个表中某列为NULL值的数据集
UPDATE cust_order
SET expected_ship_dt = SYSDATE + 1
WHERE ship_dt IS NULL;
修改某列的值为NULL时
UPDATE cust_order
SET expected_ship_dt = NULL
WHERE ship_dt IS NOT NULL;
 
注意:where子句中判断一个值是否为NULL值时使用IS NULL或者IS NOT NULL,而设置某个值为NULL值时
要用等号(=),如例子中的SET expected_ship_dt = NULL
处理NULL值时一个容易犯的错误:
 
假如我们现在要从雇员表中选择出 经理的id 不为7698的雇员,manager_emp_id允许NULL值,使用如下语句
 
SELECT fname, lname, manager_emp_id
FROM employee
WHERE manager_emp_id != 7698;
那么在我们得到的结果集中就不会有那些不归任何经理管理的雇员,因为,NULL is neither equal nor not equal to 7698
 
因此如果我们想要得到我们想要的结果集就要使用:
 
SELECT fname, lname, manager_emp_id
FROM employee
WHERE manager_emp_id IS NULL OR manager_emp_id != 7698;
但是在where子句中为每一个可以接受NULL值的列使用两个条件就显得有些烦人了,你也可以使用oracle内置的函数NVL来实现这个功能:
 
SELECT fname, lname, manager_emp_id
FROM employee
WHERE NVL(manager_emp_id, -999) != 7698;
NVL函数将NULL值转换成-999,再与7698比较,不相等,符合条件,所以在结果集中返回该行。
posted on 2007-08-02 11:45 tianjuchuan 阅读(341) 评论(0)  编辑 收藏 引用 所属分类: sql
只有注册用户登录后才能发表评论。