ISNULL (Transact-SQL)
以指定的取代值來取代 NULL。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。 |
語法
ISNULL ( check_expression , replacement_value )
引數
check_expression
這是要檢查 NULL 的運算式。 check_expression 可以是任何類型。replacement_value
這是 check_expression 為 NULL 時所傳回的運算式。 replacement_value 必須是能夠隱含地轉換成 check_expresssion 類型的類型。
傳回類型
傳回與 check_expression 相同的類型。 如果提供了常值 NULL 做為 check_expression,就會傳回 replacement_value 的資料類型。 如果提供了常值 NULL 做為 check_expression 但是沒有提供任何 replacement_value,就會傳回 int。
備註
如果 check_expression 值不是 NULL,便傳回這個值;否則,如果類型不同,便在 replacement_value 隱含地轉換成 check_expression 的類型之後,再傳回它。 如果 replacement_value 比 check_expression 長,replacement_value 可能會被截斷。
注意
使用 COALESCE (Transact-SQL) 傳回第一個非 Null 值。
範例
A.使用 ISNULL 搭配 AVG
下列範例會尋找所有產品的加權平均值。 它會在 Product 資料表的 Weight 資料行中,用值 50 來取代所有 NULL 項目。
USE AdventureWorks2012;
GO
SELECT AVG(ISNULL(Weight, 50))
FROM Production.Product;
GO
以下為結果集:
--------------------------
59.79
(1 row(s) affected)
B.使用 ISNULL
下列範例會選取 AdventureWorks2012 中所有特殊供應項目的描述、折扣百分比、最小數量和最大數量。 如果所有特殊供應項目的最大數量是 NULL,結果集所顯示的 MaxQty 便是 0.00。
USE AdventureWorks2012;
GO
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'
FROM Sales.SpecialOffer;
GO
以下為結果集:
Description DiscountPct MinQty Max Quantity
--------------- ------------- -------- ---------------
No Discount 0.00 0 0
Volume Discount 0.02 11 14
Volume Discount 0.05 15 4
Volume Discount 0.10 25 0
Volume Discount 0.15 41 0
Volume Discount 0.20 61 0
Mountain-100 Cl 0.35 0 0
Sport Helmet Di 0.10 0 0
Road-650 Overst 0.30 0 0
Mountain Tire S 0.50 0 0
Sport Helmet Di 0.15 0 0
LL Road Frame S 0.35 0 0
Touring-3000 Pr 0.15 0 0
Touring-1000 Pr 0.20 0 0
Half-Price Peda 0.50 0 0
Mountain-500 Si 0.40 0 0
(16 row(s) affected)
C.在 WHERE 子句中測試 NULL
請勿使用 ISNULL 來尋找 NULL 值。 請改用 IS NULL。 下列範例會尋找加權資料行中有 NULL 的所有產品。 請注意 IS 和 NULL 之間的空格。
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO