ISNULL (Transact-SQL)

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

以指定的取代值來取代 NULL。

Transact-SQL 語法慣例

Syntax

ISNULL ( check_expression , replacement_value )  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

check_expression
為要檢查 NULL 的運算式check_expression 可為任何類型。

replacement_value
check_expression 是 NULL 時,要傳回的運算式。 replacement_value 必須是能夠隱含轉換成 check_expression 類型的類型。

傳回型別

傳回與 check_expression 相同的類型。 若將常值 NULL 作為 check_expression 提供,則會傳回 replacement_value 的資料類型。 若將常值 NULL 作為 check_expression 提供,並且未提供任何 replacement_value,則會傳回 int

備註

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

注意

使用 COALESCE (Transact-SQL) 來傳回第一個不是 NULL 的值。

範例

A. 使用 ISNULL 搭配 AVG

下列範例會尋找所有產品的加權平均值。 它會在 50 資料表的 Weight 資料行中,用值 Product 來取代所有 NULL 項目。

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

以下為結果集。

-------------------------- 
59.79  
 
(1 row(s) affected)

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)
{1}No Discount{2} 0.00 0 0
{1}Volume Discount{2} 0.02 11 14
{1}Volume Discount{2} 0.05 15 4
{1}Volume Discount{2} 0.10 25 0
{1}Volume Discount{2} 0.15 41 0
{1}Volume Discount{2} 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 的所有產品。 請注意 ISNULL 之間的空格。

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

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

D. 使用 ISNULL 搭配 AVG

下列範例會尋找範例資料表中所有產品的加權平均值。 它會在 50 資料表的 Weight 資料行中,用值 Product 來取代所有 NULL 項目。

-- Uses AdventureWorks  
  
SELECT AVG(ISNULL(Weight, 50))  
FROM dbo.DimProduct;  

以下為結果集。

--------------------------   
52.88   

E. 使用 ISNULL

下列範例會使用 ISNULL 來在 MinPaymentAmount 資料行中測試 NULL 值,然後為那些資料列顯示 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 AdventureWorks  
  
SELECT EnglishProductName, Weight  
FROM dbo.DimProduct  
WHERE Weight IS NULL;  

另請參閱

運算式 (Transact-SQL)
IS NULL (Transact-SQL)
系統函數 (Transact-SQL)
WHERE (Transact-SQL)
COALESCE (Transact-SQL)