作者arkcsl (米斯特・亚克)
看板Database
标题Re: [SQL ] 是否避免null值
时间Thu May 23 08:13:20 2013
: 我不知道 null 值到底好不好,不过目前接到一个资料库,情况是这样
: 如果没有值,有可能是 NULL 或是 ' ' ...
: 这样我判断是否有值时都要加 TRIM ...
: 以上只是一种情况... 好坏不确定...
: 不过我最近在写plsql, NULL 值会有一个缺点 (也不知道算不算缺点)
对我来说,该要是NULL就应该要是NULL
如果你放-1 或者 其他值 来取代 NULL,那之後要维护的人,
怎麽会知道 这些东西是刻意取代NULL 还是有其他用意
在维护资料的正确性来说,我认为该是NULL就是NULL
: 以上,是错的... 因为你永远到不了 NULL 那一行 ...
: 因为跟 NULL 比较的栏位回传值是 NULL ... ( 不是true 也不是 false )
: 在 plsql 里面,无法比较 NULL
: 所以你判断 NULL 时会用 IS NULL 而不是 = NULL
: 以上例子只是一个 case ... 而且是真实的 case ...
: 若要修改成可以正确输出会是这样
: case NVL(TRIM(ROWDATA.sex),'NULL')
: when '1' then dbms_output.put_line('男人');
: when '2' then dbms_output.put_line('女人');
: when 'NULL' then dbms_output.put_line('无值');
: else dbms_output.put_line('错误');
: end case;
如果是WHERE A = B的情况,其实比较没有问题 应该NULL本来就不会进去。
但是是在WHERE A <> B的情况就需要特别留意
假设今天有3笔资料
SEX NUMBER
男人 1
女人 2
未知 NULL
找男人:
select * from table where NUMBER = '1'
找不是男人:
select * from table where NVL(NUMBER,'X') <> '1'
如果没有用NVL 你只会得到[女人 2] 这笔资料
用了NVL才有办法取得 [女人 2] 和 [未知 NULL] 两笔资料
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 69.178.184.194