在「
如何找出欄位值是 NULL 的資料
」,已經討論過要如何找出 NULL 值的資料。這次要分享的是讓 NULL 值的資料,不要顯示為 NULL,而是改以其他文字來取代。
Microsoft SQL Server 提供一個 ISNULL 函數,可以讓我們取代 NULL 值,其語法如下:
ISNULL(陳述式1, 陳述式2)
當「陳述式1」的結果是 NULL 時,就傳回「陳述式2」的值,否則就會傳回「陳述式1」的值。例如,下面的程式碼,表示找出「產品編號」小於 325 的產品,當「顏色」欄位的值是 NULL 時,會改用「未知」來顯示:
USE AdventureWorks
SELECT ProductID 產品編號, ISNULL(Color, '未知') 顏色
FROM Production.Product
WHERE ProductID < 325
ORDER BY ProductID
執行結果:
既然分享了如何使用 ISNULL 函數,就順便說一說跟它很相似的另外一個函數:NULLIF,其使用的語法為:
NULLIF(陳述式1, 陳述式2)
當「陳述式1」的結果與「陳述式2」的結果相等時,就會傳回 NULL 值,否則就會傳回「陳述式1」的值。
例如下面的程式碼,表示當找出「產品編號」是 325 之前的產品,並使用 NULLIF 判斷「製造代碼」與「成品代碼」是否相同:
USE AdventureWorks
SELECT ProductID 產品編號, MakeFlag 製造代碼, FinishedGoodsFlag 成品代碼,
NULLIF(MakeFlag, FinishedGoodsFlag) 製造代碼與成品代碼是否相同
FROM Production.Product
WHERE ProductID < 325
ORDER BY ProductID
執行結果:
不知道大家有沒有發現到:如果比較的結果為真,NULLIF 就會傳回 NULL,而 ISNULL 卻傳回非 NULL 的值(從語法來看,就是傳回「陳述式2」的值)。這就是這兩個函數最大的差異!