ISNULL (Transact-SQL)
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库
使用指定的替换值替换 NULL。
语法
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,则结果集中显示的 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 | 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
的所有产品。 请注意 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 一起使用
以下示例查找示例表中所有产品的重量平均值。 它用值 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
的所有产品。 请注意 IS
和 NULL
之间的空格。
-- 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)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈