iT邦幫忙

DAY 26
9

T-SQL 應用之美系列 第 26

如何改變欄位值是 NULL 的資料顯示的結果

在「如何找出欄位值是 NULL 的資料」,已經討論過要如何找出 NULL 值的資料。這次要分享的是讓 NULL 值的資料,不要顯示為 NULL,而是改以其他文字來取代。
Microsoft SQL Server 提供一個 ISNULL 函數,可以讓我們取代 NULL 值,其語法如下:

ISNULL(陳述式1, 陳述式2)

當「陳述式1」的結果是 NULL 時,就傳回「陳述式2」的值,否則就會傳回「陳述式1」的值。例如,下面的程式碼,表示找出「產品編號」小於 325 的產品,當「顏色」欄位的值是 NULL 時,會改用「未知」來顯示:

USE AdventureWorks
GO

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
GO

SELECT ProductID 產品編號, MakeFlag 製造代碼, FinishedGoodsFlag 成品代碼, 
   NULLIF(MakeFlag, FinishedGoodsFlag) 製造代碼與成品代碼是否相同
FROM Production.Product
WHERE ProductID < 325
ORDER BY ProductID

執行結果:

不知道大家有沒有發現到:如果比較的結果為真,NULLIF 就會傳回 NULL,而 ISNULL 卻傳回非 NULL 的值(從語法來看,就是傳回「陳述式2」的值)。這就是這兩個函數最大的差異!


上一篇
如何找出欄位值是 NULL 的資料
下一篇
如何使用 T-SQL 取到小數點後第 n 位
系列文
T-SQL 應用之美30

2 則留言

0
魯大
iT邦高手 1 級 ‧ 2008-09-27 19:28:46

大大這個函數(ISNULL)對於欄位值是空白的會有用嗎??
因為常常在程式運作過程中
user常會不keyin一些欄位的資料
或是剛好沒有資料,就會留下空白
事後在資料做查詢時,總是會出現錯誤...

alexc iT邦高手 1 級 ‧ 2008-09-27 21:50:17 檢舉

欄位值是 NULL 跟空白是不同的值
NULL 是一個虛無值
空白是空字串,就是在插入資料時,用 '' 的表示法新增資料到資料表中

0
davidliu9116
iT邦研究生 3 級 ‧ 2015-05-15 12:01:39

SQL查詢 Export 成CSV檔時它會很雞婆的把Null值填入NULL字串
例如:
ON Call,7,NULL,NULL,加,NULL
我希望它保持入下的資料,Null值是不塞入任何資料的
ON Call,7,,,加,
請問如何達成?

捷客 iT邦新手 4 級 ‧ 2019-10-23 18:28:18 檢舉

那就是下 isnull(欄位名,'')
就不會出成 null,而是空字串

我要留言

立即登入留言