Re: [SQL ] 是否避免null值

看板Database作者 (米斯特・亞克)時間11年前 (2013/05/23 08:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/7 (看更多)
: 我不知道 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
文章代碼(AID): #1HdLyYwv (Database)
討論串 (同標題文章)
文章代碼(AID): #1HdLyYwv (Database)