最近寫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...