ISNULL (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
NULL
以指定的取代值取代 。
語法
ISNULL ( check_expression , replacement_value )
引數
check_expression
要檢查NULL
的表達式。 check_expression 可為任何類型。
replacement_value
如果 check_expression 為 NULL
,則傳回的表達式。 replacement_value 必須是能夠隱含轉換成 check_expression 類型的類型。
傳回類型
傳回與 check_expression 相同的類型。 如果常值NULL
是以check_expression的形式提供,ISNULL
則傳回replacement_value的數據類型。 如果常值NULL
是以check_expression提供,而且未提供任何replacement_value,ISNULL
則會傳回 int。
備註
如果不是 NULL
,則會傳回 check_expression的值。 否則,如果類型不同,則會在隱含轉換成check_expression類型之後傳回replacement_value。 若 replacement_value 的長度超過 check_expression,則 replacement_value 可能會被截斷。
注意
使用 COALESCE 傳回第一個非 Null 值。
範例
本文 Transact-SQL 程式碼範例使用 AdventureWorks2022
或 AdventureWorksDW2022
範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。
A. 搭配AVG使用ISNULL
下列範例會尋找所有產品的加權平均值。 它會取代數據表數據列Product
中Weight
所有NULL
專案的值50
。
USE AdventureWorks2022;
GO
SELECT AVG(ISNULL(Weight, 50))
FROM Production.Product;
GO
結果集如下所示。
59.79
B. 使用ISNULL
下列範例會選取 AdventureWorks2022
中所有特殊供應項目的描述、折扣百分比、最小數量和最大數量。 如果特定特殊供應專案的最大數量是 NULL
, MaxQty
則結果集中顯示的 是 0.00
。
USE AdventureWorks2022;
GO
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'
FROM Sales.SpecialOffer;
GO
結果集如下所示。
描述 | DiscountPct | MinQty | 最大數量 (Max Quantity) |
---|---|---|---|
No Discount |
0.00 | 0 | 0 |
Volume Discount 11 to 14 |
0.02 | 11 | 14 |
Volume Discount 15 to 24 |
0.05 | 15 | 24 |
Volume Discount 25 to 40 |
0.10 | 25 | 40 |
Volume Discount 41 to 60 |
0.15 | 41 | 60 |
Volume Discount over 60 |
0.20 | 61 | 0 |
Mountain-100 Clearance Sale |
0.35 | 0 | 0 |
Sport Helmet Discount-2002 |
0.10 | 0 | 0 |
Road-650 Overstock |
0.30 | 0 | 0 |
Mountain Tire Sale |
0.50 | 0 | 0 |
Sport Helmet Discount-2003 |
0.15 | 0 | 0 |
LL Road Frame Sale |
0.35 | 0 | 0 |
Touring-3000 Promotion |
0.15 | 0 | 0 |
Touring-1000 Promotion |
0.20 | 0 | 0 |
Half-Price Pedal Sale |
0.50 | 0 | 0 |
Mountain-500 Silver Clearance Sale |
0.40 | 0 | 0 |
下列範例會使用 ISNULL
,將的值Color
取代NULL
為 字串 None
。
USE AdventureWorks2022;
GO
SELECT ProductID,
Name,
ProductNumber,
ISNULL(Color, 'None') AS Color
FROM Production.Product;
以下為部分結果集。
ProductID | 名稱 | ProductNumber | Color |
---|---|---|---|
1 | Adjustable Race |
AR-5381 | 無 |
2 | Bearing Ball |
BA-8327 | 無 |
3 | BB Ball Bearing |
BE-2349 | 無 |
4 | Headset Ball Bearings |
BE-2908 | 無 |
316 | Blade |
BL-2036 | 無 |
317 | LL Crankarm |
CA-5965 | 黑色 |
318 | ML Crankarm |
CA-6738 | 黑色 |
319 | HL Crankarm |
CA-7457 | 黑色 |
C. NULL
在 WHERE 子句中測試
請勿用來 ISNULL
尋找 NULL
值。 請改用 IS NULL
。 下列範例會尋找加權資料行中有 NULL
的所有產品。 請注意 IS
和 NULL
之間的空格。
USE AdventureWorks2022;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
D. 搭配AVG使用ISNULL
下列範例會尋找範例資料表中所有產品的加權平均值。 它會取代數據表數據列Product
中Weight
所有NULL
專案的值50
。
-- Uses AdventureWorksDW
SELECT AVG(ISNULL(Weight, 50))
FROM dbo.DimProduct;
結果集如下所示。
52.88
E. 使用ISNULL
下列範例會使用 ISNULL
來測試 NULL
數據行 MinPaymentAmount
中的值,並顯示那些數據列的值 0.00
。
-- Uses AdventureWorks
SELECT ResellerName,
ISNULL(MinPaymentAmount,0) AS MinimumPayment
FROM dbo.DimReseller
ORDER BY ResellerName;
以下為部分結果集。
ResellerName | MinimumPayment |
---|---|
A Bicycle Association | 0.0000 |
A Bike Store | 0.0000 |
A Cycle Shop | 0.0000 |
A Great Bicycle Company | 0.0000 |
A Typical Bike Shop | 200.0000 |
可接受的銷售與服務 | 0.0000 |
F. 使用IS NULL 測試 WHERE 子句中的 NULL
下列範例會尋找 NULL
資料行中有 Weight
的所有產品。 請注意 IS
和 NULL
之間的空格。
-- Uses AdventureWorksDW
SELECT EnglishProductName, Weight
FROM dbo.DimProduct
WHERE Weight IS NULL;