ISNULL (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

使用指定的替换值替换 NULL。

Transact-SQL 语法约定

语法

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,则将返回该表达式的值;否则,将返回 replacement_value。如果类型不同,则 replacement_value 会隐式转换为 check_expression 的类型 。 如果 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,则结果集中显示的 MaxQty0.00

USE AdventureWorks2022;  
GO  
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'  
FROM Sales.SpecialOffer;  
GO  

下面是结果集。

说明 DiscountPct MinQty 最大数量
No Discount 0.00 0 0
Volume Discount 0.02 11 14
Volume Discount 0.05 15 4
Volume Discount 0.10 25 0
Volume Discount 0.15 41 0
Volume Discount 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。 下面的示例查找 weight 列中存在 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
自行车协会 0.0000
自行车商店 0.0000
自行车店 0.0000
杰出的自行车公司 0.0000
典型自行车店 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)