共用方式為


ISNULL(Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲Microsoft Fabric 中的 SQL 資料庫

NULL以指定的取代值取代 。

Transact-SQL 語法慣例

語法

ISNULL ( check_expression , replacement_value )

引數

check_expression

check_expression 可為任何類型。

replacement_value

如果 check_expressionNULL,則傳回的表達式。 replacement_value 必須是能夠隱含轉換成 check_expression 類型的類型。

傳回類型

傳回與 check_expression 相同的類型。 如果常值NULL是以check_expression的形式提供,ISNULL則傳回replacement_value數據類型。 如果常值NULL是以check_expression提供,而且未提供任何replacement_valueISNULL則會傳回 int

備註

如果不是 ,則會傳回 check_expressionNULL。 否則,如果類型不同,則會在隱含轉換成check_expression類型之後傳回replacement_value。 若 replacement_value 的長度超過 check_expression,則 replacement_value 可能會被截斷。

注意

使用 COALESCE 傳回第一個非 Null 值。

範例

本文中的程式代碼範例會使用 AdventureWorks2025AdventureWorksDW2025 範例資料庫,您可以從 Microsoft SQL Server 範例和社群專案 首頁下載。

A. 搭配AVG使用ISNULL

下列範例會尋找所有產品的加權平均值。 它會取代數據表數據列50NULL所有Weight專案的值Product

USE AdventureWorks2022;
GO
SELECT AVG(ISNULL(Weight, 50))
FROM Production.Product;
GO

結果集如下所示。

59.79

B. 使用ISNULL

下列範例會選取 AdventureWorks2025 中所有特殊供應項目的描述、折扣百分比、最小數量和最大數量。 如果特定特殊供應專案的最大數量是 NULLMaxQty 則結果集中顯示的 是 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 的所有產品。 請注意 ISNULL 之間的空格。

USE AdventureWorks2022;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

D. 搭配AVG使用ISNULL

下列範例會尋找範例資料表中所有產品的加權平均值。 它會取代數據表數據列50NULL所有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 的所有產品。 請注意 ISNULL 之間的空格。

-- Uses AdventureWorksDW

SELECT EnglishProductName, Weight
FROM dbo.DimProduct
WHERE Weight IS NULL;