細說plsql中的空值表示式

2021-05-17 20:50:19 字數 1121 閱讀 9400

最近寫sql的時候遇到了一些麻煩,一翻深究之後發現了關於空值表示式的規律,先看幾個例子:

declare

a integer;

b integer;

c boolean;

begin

a := 1;

b := null;

c := (a=b);

if a = b then

dbms_output.put_line('print yes');

else

dbms_output.put_line('print no');

end if;

end;

結果是輸出:print no

再反過來,寫成

declare

a integer;

b integer;

c boolean;

begin

a := 1;

b := null;

c := (a!=b);

if a != b then

dbms_output.put_line('print yes');

else

dbms_output.put_line('print no');

end if;

end;

結果仍然是輸出:print no

規律第一條:if條件中如果使用null來判斷,那麼結果總是為(非真)。

用dabug工具跟蹤後發現,c的實際值既不是ture也不是false,也不是null,而是什麼都沒有(變數跟蹤的值域裡面空空如也,連「null」都不顯示)。

進一步研究發現:

(null and true)、(true and null)、(null or false)、(false or null)的值都是非真且什麼都沒有;

(null or true)、(true or null)的值為true;

(null and false)、(false and null)的值為false;

規律第二條:and和or是有交換律的。

規律第三條:在and表示式中,只要有乙個false,就可以確定該表示式的值(為false);在or表示式中,只要有乙個true,就可以確定該表示式的值(為true);chucizhiwei

處理表示式中的空值 nvl()舉例

select sal nvl comm,0 from emp sal和comm是資料庫中的字段,這是資料庫練習表中的兩列,表示工資和獎金,整條語句是為了統計每個員工的全年收入。因為comm的值有時某員工為0,而在表中表示為null,在參與數學表示式計算時會讓整體結果輸出為0,所以要想辦法對參與計算的...

用正規表示式匹配「空值」

最近在做乙個專案,要讀取文字檔案匯入資料庫,但是為了效能和介面友好的問題,於是打算匯入之前檢查文字檔案的格式是否正確,如果不正確,則作出相應提示而停止匯入,所以要對文字檔案逐行掃瞄,然後檢查每一行的格式,如果不符合約定的格式,則提示使用者對應的行數。自然而然想到用正規表示式。但是就有個問題了,文字檔...

Hive中表示式包含空值的問題

在學習hive過程中遇到了乙個問題 如果查詢語句中的表示式包含空值,會導致最終表示式結果為空值。舉乙個例子,假設有乙個員工表emp name salcomm jack 1000 200tony 1200 300tom 1300 null rose 900100 lily 800500 tim1100...