[SQL] Coalesce 與 Isnull 差異與用法

Coalesce & Isnull 其實在只有兩個參數的時候,效果是一模一樣的

Coalesce 可以多個參數

但Isnull 僅只能兩個參數

話不多說,就開始看Code吧(程式人最愛直接看code)

 

--------------------------------------------------------------------

 

先Select 出資料給大家看(預先準備好的資料)

Select ProductId,ProductName,Price1,Price2,Price3

From [dbo].[商品價格表]

 

 

首先先說明Isnull 如何使用

 

ISNULL ( check_expression , replacement_value )  //來自 Msdn

 

這其實就是 Isnull (要檢查的欄位, 要替換的值) //白話就是這樣啊

假設今天我們要把這張表全部的Null 都填成 0

那就可以下

 

Select ProductId,ProductName,Isnull(Price1,0),Isnull(Price2,0),Isnull(Price3,0)

From [dbo].[商品價格表]

 

 

這就是Isnull

那Coalesce呢?

別急別急,先去MSDN 看一下

COALESCE ( expression [ ,...n ] ) // expresstion.... 這樣到底脽看得懂,摁,我也看不懂,所以別害怕

其實當初的我看到這個我也傻眼

根本天文書阿一個expression 到底是想代表甚麼

但其實人家MSDN 有舉例說明拉

 

SELECT COALESCE(NULL, NULL, 'third_value', 'fourth_value');

returns the third value because the third value is the first value that is not null.

 

你看它說了return 第三個value 因為前面兩個都是null 只有 third value這個欄位是有值的

這時這時!

 

 

我們先看回來

第一張表一開始是長這樣

那如果我要讓 所有ProductName 都有Price 如果Price1沒有值,就用Price2替補,再沒有就用Price3替補


Select ProductId, ProductName, COALESCE(Price1 , Price2 , Price3 )

From [dbo].[商品價格表]

 

 

你看是不是很容易理解了? 所以有人會說 Isnull 跟 Coalesce 很容易搞混?

我想他們真的是很不一樣啦

[當然如果 Isnull 第一個值 要用第二個來補]

[然後Coalesce 第一個值也用第二個捕]

[這樣就一樣了....ㄏㄏ]