程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Firebird裡如何防止空值擴散

在Firebird裡如何防止空值擴散

編輯:Delphi
     在統計、計算、合並數據時,空值擴散問題,有時不經意冒出來,一不小心,就會導致結果出錯。
          我舉個例子。
         有一個成績表achIEve,有四個字段:yuwen、shuxue、yingyu、total,分別用來存儲語文、數學、英語及總分。現在要計算學生的總分,現寫出如下SQL語句:
          update achIEve set total=yuwen+shuxue+yingyu
          這句語句好像是沒錯的,但有時得不出有用的結果,比如,有個學生語文80,數學90,英語缺考,沒填成績,這時yingyu字段的值很可能不是0而是NULL,空值,要看設計的人是什麼想法。如果yingyu的值為NULL,那麼,大家猜猜,計算出來,總分字段total為多少?
          按一般的想法,當然是80+90,這個學生的總分是170,英語字段不參加計算。但是,這是錯誤的!
          實際計算出來,這個學生的總分為空(NULL)。
          在一個SQL計算表達式裡,如果有一個值為空,那麼結果就一定為空!這就是空值擴散!!!
          那麼,如何防止出現空值擴散的情況呢?
          在這方面,SQL Server提供了ISNULL()函數,Access提供了NZ()函數,都可以解決這個問題,這些函數就是提供一個判斷功能:如果為空,則用某個值代替,比如用0或用空字符串等。Firebird有類似函數麼?
          有,那就是函數coalesce()。
          只要將以上的SQL語句改為如下即可。
         update achIEve set total=coalesce(yuwen,0)+coalesce(shuxue,0)+coalesce(yingyu,0)
          這樣寫,似乎麻煩了一些,但是,它是一個安全的代碼。

  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved