Hits: 2374
今天發現,在 oracle 中,若查詢需要過濾的欄位中有空值,必須先處理 null ,不然就算欄位有 null 以外的值,也查不到。用以下範例來說明:
-- 查詢指令
SELECT ID, TYPE FROM USER
查詢結果如下,可以發現 TYPE 欄位中有 DS 以及 NULL 值
此時,我想要查出 TYPE != 'DS'
的 ID,預期會查出 ID 為 00320518, 00326426, 00326711的資料,那我們來看看結果吧:
SELECT ID, TYPE FROM USER WHERE TYPE != 'DS'
查詢結果竟然是空白?!與預期的完全不同?
與公司的 DBA 詢問後,確認是因為 TYPE 欄位內有 NULL 導致的,因為在使用 where 語句時, Oracle 若判斷這個欄位內有空值,則回傳的結果就為空值,因此要針對 NULL 值處理,把查詢指令修改為:
SELECT ID, TYPE FROM USER WHERE (TYPE != 'DS' OR TYPE IS NULL)
結果就符合預期了
Comments