ISNULL (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (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_expressionNULL,则返回的表达式 。 replacement_value 必须是可隐式转换为 check_expression 类型的类型 。

返回类型

返回与该 check_expression 相同的类型 。 如果文本NULL作为check_expression提供,ISNULL则返回replacement_value数据类型。 如果文本作为check_expression提供,并且未提供任何replacement_valueISNULL返回 int NULL

注解

如果NULL不是,则返回check_expression的值。 否则,如果类型不同,则会在隐式转换为check_expression类型后返回replacement_value。 如果 replacement_value 长于 check_expression,则可能截断 replacement_value 。

注意

使用 COALESCE 返回第一个非 null 值。

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

A. 将 ISNULL 与 AVG 配合使用

以下示例查找所有产品的重量平均值。 它将替换表列中Product所有NULL条目Weight的值50

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

下面是结果集:

59.79

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 最大数量
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字符串None替换NULLColor值。

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 在 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 配合使用

以下示例查找示例表中所有产品的重量平均值。 它将替换表列中Product所有NULL条目Weight的值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
自行车协会 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;