分享方式:


ISNULL (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

NULL以指定的取代值取代 。

Transact-SQL 語法慣例

語法

ISNULL ( check_expression , replacement_value )

引數

check_expression

要檢查NULL的表達式check_expression 可為任何類型。

replacement_value

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

傳回類型

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

備註

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

注意

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

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。

A. 搭配AVG使用ISNULL

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

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

結果集如下所示。

59.79

B. 使用ISNULL

下列範例會選取 AdventureWorks2022 中所有特殊供應項目的描述、折扣百分比、最小數量和最大數量。 如果特定特殊供應專案的最大數量是 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 ,將的值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 的所有產品。 請注意 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

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

-- Uses AdventureWorksDW

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