oracle中null和 的坑

2021-10-14 13:19:05 字數 1486 閱讀 1939

例如type欄位有 null、』』、0、1、2、3 幾個值,想要篩選出有資料,但是不為3的資料。

語句:

select

*from t_user where

type

isnot

null

andtype

!='3'

andtype

!=''

;

但是發現查不出資料,這就怪了。

一開始以為oracle同字段不支援2個 != ,那麼測試下:

select

*from t_user where

type

!='3'

andtype

!='4'

;

發現有結果,同欄位2個!=是沒問題的。

這裡只模擬char和varchar2型別,其他的先不考慮。

試下查詢

select

*from t_user where

type

!=''

;-- 查不出結果

select

*from t_user where

type

isnot

null

;-- 有結果

select

*from t_user where

type=''

;-- 查不出結果

select

*from t_user where

type

isnull

;-- 有結果

試下update

那麼update可以嗎?語句:

update t_user set

type=''

where id =1;

update t_user set

type

=null

where id =2;

再查一下:

select

*from t_user where

type

isnull

;發現''和null的結果都能查出來。

也就是說在oracle中,查詢』'和null都要用 is null來查。

回到最初問題

那麼開始遇到的問題就很好解決了。

要篩選不為null和不為』'的資料,只要乙個 is not null 即可。

語句:

select

*from t_user where

type

isnot

null

andtype

!='3'

-- and type !='' -- 這個條件查不出任何內容,必須去掉

問題解決。

注:當型別為char或varchar2時,過濾條件,不要用 =『』 或者 !=』』,因為什麼都查不出來。

mysql沒有此限制。

MySQL中避免NULL的坑

當資料的值為null的時候,可能出現各種意想不到的效果,讓人防不勝防,我們來看看null導致的各種神坑,如何避免?下面對null進行總結 1 null作為布林值的時候,不為1也不為0 2 任何值和null使用運算子 或者 in not in any some all 返回值都為null 3 當in和...

Oracle中null的使用

問 什麼是null?答 在我們不知道具體有什麼資料的時候,也即未知,可以用null,我們稱它為空,oracle中,含有空值的表列長度為零。oracle允許任何一種資料型別的字段為空,除了以下兩種情況 1 主鍵字段 primary key 2 定義時已經加了not null限制條件的字段 說明 1 等...

oracle中NULL的意義和條件操作

null的意義 沒有值,不等價於任何值,是乙個未知數,具有不確定性。null和空字串,0,空格均不相等。當null作為條件進行操作時,就不能用 即不能定值判斷,應該使用is null 或者 is not null。此外,非用is null is not null語句外,對null的操作均不會出現返回...