適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
NULL以指定的取代值取代 。
語法
ISNULL ( check_expression , replacement_value )
引數
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。
備註
如果不是 ,則會傳回 check_expressionNULL。 否則,如果類型不同,則會在隱含轉換成check_expression類型之後傳回replacement_value。 若 replacement_value 的長度超過 check_expression,則 replacement_value 可能會被截斷。
注意
使用 COALESCE 傳回第一個非 Null 值。
範例
本文中的程式代碼範例會使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 Microsoft SQL Server 範例和社群專案 首頁下載。
A. 搭配AVG使用ISNULL
下列範例會尋找所有產品的加權平均值。 它會取代數據表數據列50中NULL所有Weight專案的值Product。
USE AdventureWorks2022;
GO
SELECT AVG(ISNULL(Weight, 50))
FROM Production.Product;
GO
結果集如下所示。
59.79
B. 使用ISNULL
下列範例會選取 AdventureWorks2025 中所有特殊供應項目的描述、折扣百分比、最小數量和最大數量。 如果特定特殊供應專案的最大數量是 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 ,將的值NULL取代Color為 字串 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
下列範例會尋找範例資料表中所有產品的加權平均值。 它會取代數據表數據列50中NULL所有Weight專案的值Product。
-- 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 |
|---|---|
| 自行車協會 | 0.0000 |
| 自行車店 | 0.0000 |
| 自行車店 | 0.0000 |
| 偉大的自行車公司 | 0.0000 |
| 一家典型的自行車店 | 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;