coalesce()函式
主流資料庫系統都支援coalesce()函式,這個函式主要用來進行空值處理,其引數格式如下:
coalesce ( expression,value1,value2……,valuen)
coalesce()函式的第乙個引數expression為待檢測的表示式,而其後的引數個數不定。
coalesce()函式將會返回包括expression在內的所有引數中的第乙個非空表示式。
如果expression不為空值則返回expression;否則判斷value1是否是空值,
如果value1不為空值則返回value1;否則判斷value2是否是空值,
如果value2不為空值則返回value2;……以此類推,
如果所有的表示式都為空值,則返回null。
我們將使用coalesce()函式完成下面的功能,返回人員的「重要日期」:
如果出生日期不為空則將出生日期做為「重要日期」,如果出生日期為空則判斷註冊日期是否為空,如果註冊日期不為空則將註冊日期做為「重要日期」,如果註冊日期也為空則將「2023年8月8日」做為「重要日期」。實現此功能的sql語句如下:
mysql、mssqlserver、db2:
select fname,fbirthday,fregday,
coalesce(fbirthday,fregday,'2008-08-08') as importday
from t_person
oracle:
select fbirthday,fregday,
coalesce(fbirthday,fregday,to_date('2008-08-08', 'yyyy-mm-dd hh24:mi:ss'))
as importday
from t_person
執行完畢我們就能在輸出結果中看到下面的執行結果:
fname fbirthday fregday importday
tom 1981-03-22 00:00:00 1998-05-01 00:00:00 1981-03-22 00:00:00
jim 1987-01-18 00:00:00 1999-08-21 00:00:00 1987-01-18 00:00:00
lily 1987-11-08 00:00:00 2001-09-18 00:00:00 1987-11-08 00:00:00
kelly 1982-07-12 00:00:00 2000-03-01 00:00:00 1982-07-12 00:00:00
sam 1983-02-16 00:00:00 1998-05-01 00:00:00 1983-02-16 00:00:00
kerry 1999-03-01 00:00:00 1999-03-01 00:00:00
smith 2008-08-08
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
sql coalesce 函式 的應用
quote coalesce 函式 簡介 t sql的coalesce 函式能夠讓你指定多個表示式,而且coalesce 會返回組裡第乙個非空的值。要使用下面的形式,其中expression可以是任何資料型別,並能夠等於大多數合法的表示式 coalesce expression n 與case函式等...
linux wait函式解析
程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait 就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wait就會一直阻塞在這裡,直到有乙個出現為止。wait 等待子程序中斷或結束...
matlab cov 函式解析
最近在用matlab 一直搞不懂cov 函式怎麼算出來了。從網上查了一下,結合一些程式例子總結如下 x 6 9 3 4 5 4 2 1 6 7 7 8 7 8 9 10 cov x ans 0.6667 1.3333 2.3333 3.0000 1.3333 4.6667 3.0000 5.0000...