NULLIF 運算式
如果兩個指定的運算式相等,便傳回 Null 值。
NULLIF 運算式回傳值的規則,整理如下:
(1) 如果兩個運算式「不相等」,NULLIF 會傳回第一個 expression。
(2) 如果運算式「相等」,NULLIF 會傳回第一個 expression 之類型的 Null 值。
NULLIF 相當於兩個運算式相等且產生的運算式為 NULL 的搜尋 CASE 運算式。
語法:
NULLIF ( expression , expression )
NULL 值表示是未知的值。
NULL 值與空的值或零值不同。
兩個 Null 值永遠不會相等。
因為每個 NULL 的值都是未知的,兩個 Null 值之間、或是一個 NULL 與其他任何值之間的比較都會傳回未知的。
請參考以下的範例程式碼:
EX1:認識 NULLIF 運算式
-- NULLIF 運算式:資料庫定序:區分大小寫 SELECT NULLIF(1 ,2) , NULLIF(1,1), NULLIF('AB','Ab'), NULLIF('AB','AC') GO
-- 01_NULLIF 運算式:資料庫定序:區分大小寫
-- NULLIF 運算式:資料庫定序:不區分大小寫 USE Northwind GO SELECT NULLIF(1 ,2) , NULLIF(1,1), NULLIF('AB','Ab'), NULLIF('AB','AC') GO
-- 02_NULLIF 運算式:資料庫定序:不區分大小寫
-- NULLIF() 運算式:搭配變數 DECLARE @c1 INT =10 ,@c2 INT = NULL SELECT NULLIF(@c1 , @c2) GO
-- 03_ NULLIF() 運算式:搭配變數
EX2:使用 NULLIF 運算式來處理分母為 0 的情形
-- 分母為 0,產生錯誤訊息:8134。 DECLARE @c1 INT=0 SELECT 100/@c1 GO /* 錯誤訊息: 訊息 8134,層級 16,狀態 1,行 3 發現除以零的錯誤。 */
-- 04_分母為 0,產生錯誤訊息:8134
-- 使用 NULLIF 運算式來處理分母為 0 的情形 DECLARE @c1 INT=0 SELECT 100/NULLIF(@c1,0) N'運算結果' GO /* 回傳:NULL */
-- 05_使用 NULLIF 運算式來處理分母為 0 的情形
EX3:比較 NULLIF 和 CASE
下列查詢會評估 UnitsInStock 和 ReorderLevel 資料行中的值是否相同,以顯示 NULLIF 和 CASE 之間的相似度。
第一個查詢使用 NULLIF。第二個查詢則使用 CASE 運算式。
NULLIF 相當於兩個運算式相等且產生的運算式為 NULL 的搜尋 CASE 運算式。
-- 使用 NULLIF 運算式 USE Northwind GO SELECT ProductID, ProductName, UnitsInStock, ReorderLevel, NULLIF(UnitsInStock, ReorderLevel) N'運算結果' FROM Products GO -- 使用 CASE 運算式 SELECT ProductID, ProductName, UnitsInStock, ReorderLevel, CASE WHEN UnitsInStock = ReorderLevel THEN NULL ELSE UnitsInStock END N'運算結果' FROM Products GO
-- 06_比較 NULLIF 和 CASE
認識 NULLIF 運算式
如果兩個指定的運算式相等,便傳回 Null 值。
語法:
NULLIF ( expression , expression )
引數
expression
這是任何有效的純量運算式。
傳回類型
傳回與第一個 expression 相同的類型。
如果兩個運算式不相等,NULLIF 會傳回第一個 expression。
如果運算式相等,NULLIF 會傳回第一個 expression 之類型的 Null 值。
注意事項
NULLIF 相當於兩個運算式相等且產生的運算式為 NULL 的搜尋 CASE 運算式。
我們建議您不要在 NULLIF 函數中使用時間相依函數,例如 RAND()。
這可能會導致系統評估此函數兩次,並且傳回與兩個引動過程不同的結果。
參考資料
NULLIF (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms177562
運算式 (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms190286
T-SQL:認識 COALESCE() 函數
http://sharedderrick.blogspot.tw/2012/06/t-sql-coalesce.html
T-SQL:認識 COALESCE() 函數,補充範例
http://sharedderrick.blogspot.tw/2012/06/t-sql-coalesce_14.html
沒有留言:
張貼留言