sql語句中判斷空值的函數


COALESCE()函數
主流數據庫系統都支持COALESCE()函數,這個函數主要用來進行空值處理,其參數格式如下: 
COALESCE ( expression,value1,value2……,valuen) 
COALESCE()函數的第一個參數expression為待檢測的表達式,而其后的參數個數不定。
COALESCE()函數將會返回包括expression在內的所有參數中的第一個非空表達式。

如果expression不為空值則返回expression;否則判斷value1是否是空值,

如果value1不為空值則返回value1;否則判斷value2是否是空值,

如果value2不為空值則返回value2;……以此類推,
如果所有的表達式都為空值,則返回NULL。 


我們將使用COALESCE()函數完成下面的功能,返回人員的“重要日期”:

如果出生日期不為空則將出生日期做為“重要日期”,如果出生日期為空則判斷注冊日期是否為空,如果注冊日期不為空則將注冊日期做為“重要日期”,如果注冊日期也為空則將“2008年8月8日”做為“重要日期”。實現此功能的SQL語句如下: 
MYSQL、MSSQLServer、DB2: 
 

  1. SELECT FName,FBirthDay,FRegDay, 
  2. COALESCE(FBirthDay,FRegDay, '2008-08-08')  AS ImportDay  
  3. FROM T_Person 


Oracle: 
 

  1. SELECT FBirthDay,FRegDay,  
  2. COALESCE(FBirthDay,FRegDay, TO_DATE('2008-08-08', 'YYYY-MM-DD HH24:MI:SS'))  
  3. AS ImportDay  
  4. FROM T_Person 


  執行完畢我們就能在輸出結果中看到下面的執行結果: 

  1. FName   FBirthDay  FRegDay  ImportDay 
  2. Tom  1981 -03-22 00:00:00  1998-05-01 00:00:00  1981-03-22 00:00:00 
  3. Jim  1987 -01-18 00:00:00  1999-08-21 00:00:00  1987-01-18 00:00:00 
  4. Lily  1987 -11-08 00:00:00  2001-09-18 00:00:00  1987-11-08 00:00:00 
  5. Kelly  1982 -07-12 00:00:00  2000-03-01 00:00:00  1982-07-12 00:00:00 
  6. Sam  1983 -02-16 00:00:00  1998-05-01 00:00:00  1983-02-16 00:00:00 
  7. Kerry  < NULL>  1999-03-01 00:00:00  1999-03-01 00:00:00 
  8. Smith  < NULL>  <NULL>  2008-08-08 
  9. BillGates  1972 -07-18 00:00:00  1995-06-19 00:00:00  1972-07-18 00:00:00 


這里邊最關鍵的就是Kerry和Smith這兩行,可以看到這里的計算邏輯是完全符合我們的
需求的。

COALESCE()函數可以用來完成幾乎所有的空值處理,不過在很多數據庫系統中都提供了它的簡化版,這些簡化版中只接受兩個變量,其參數格式如下: 
MYSQL: 
  IFNULL(expression,value) 
MSSQLServer: 
  ISNULL(expression,value) 
Oracle: 
  NVL(expression,value) 

這幾個函數的功能和COALESCE(expression,value)是等價的。

比如SQL語句用於返回人員的“重要日期”,如果出生日期不為空則將出生日期做為“重要日期”,如果出生日期為空則返回注冊日期的值: 
MYSQL: 
SELECT FBirthDay,FRegDay,  
IFNULL(FBirthDay,FRegDay)  AS ImportDay  
FROM T_Person 
MSSQLServer: 
SELECT FBirthDay,FRegDay,  
ISNULL(FBirthDay,FRegDay)  AS ImportDay  
FROM T_Person 
Oracle: 
SELECT FBirthDay,FRegDay,  
NVL(FBirthDay,FRegDay)  AS ImportDay  
FROM T_Person 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM