sql COALESCE 函式解析

2021-12-30 06:26:01 字數 2224 閱讀 1301

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...