ISNULL (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
NULL
替换为指定的替换值。
语法
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提供,并且未提供任何replacement_value,ISNULL
则返回 int。 NULL
注解
如果NULL
不是,则返回check_expression的值。 否则,如果类型不同,则会在隐式转换为check_expression类型后返回replacement_value。 如果 replacement_value 长于 check_expression,则可能截断 replacement_value 。
注意
使用 COALESCE 返回第一个非 null 值。
示例
本文中的 Transact-SQL 代码示例使用 AdventureWorks2022
或 AdventureWorksDW2022
示例数据库,可从 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
替换NULL
其Color
值。
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 和 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
的所有产品。 请注意 IS
和 NULL
之间的空格。
-- Uses AdventureWorksDW
SELECT EnglishProductName, Weight
FROM dbo.DimProduct
WHERE Weight IS NULL;