Re: [SQL ] 是否避免null值
: 我不知道 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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 7 篇):