ISNULL(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric中的SQL分析端点Microsoft Fabric中的仓库Microsoft Fabric中的SQL数据库

NULL替换为指定的替换值。

Transact-SQL 语法约定

语法

ISNULL ( check_expression , replacement_value )

参数

check_expression

要检查的NULL。 check_expression 可以是任何类型 。

replacement_value

如果 check_expression 为 NULL,则返回的表达式 。 replacement_value 必须是可隐式转换为 check_expression 类型的类型 。

返回类型

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

注解

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

注意

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

示例

本文中的代码示例使用AdventureWorks2025了 or AdventureWorksDW2025 示例数据库,你可以从 Azure Data SQL Samples Repository 的 GitHub 仓库下载。

A. 将 ISNULL 与 AVG 配合使用

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

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

结果集如下。

59.79

B. 使用 ISNULL

以下示例选择 AdventureWorks2025 中所有特价产品的说明、折扣百分比、最小量和最大量。 如果特定特殊产品/服务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字符串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 在 WHERE 子句中测试NULL

请勿用于 ISNULL 查找 NULL 值。 请改用 IS NULL。 下面的示例查找 weight 列中存在 NULL 的所有产品。 请注意 IS 和 NULL 之间的空格。

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

示例:Azure Synapse Analytics

D. 将 ISNULL 与 AVG 配合使用

以下示例查找示例表中所有产品的重量平均值。 它将替换表列中50所有NULL条目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 的所有产品。 请注意 IS 和 NULL 之间的空格。

-- Uses AdventureWorksDW

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