ISNULL (Transact-SQL)
适用于:
- SQL Server
- Azure SQL 数据库
- Azure SQL 托管实例
- Azure Synapse Analytics 分析平台系统 (PDW)
- Microsoft Fabric 中的 SQL 分析端点
- Microsoft Fabric 中的仓库
NULL替换为指定的替换值。
1、语法
sql
ISNULL ( check_expression , replacement_value )
2、参数
sql
check_expression
要检查NULL的表达式。 check_expression 可以是任何类型 。
replacement_value
如果 check_expression 为 NULL,则返回的表达式 。 replacement_value 必须是可隐式转换为 check_expression 类型的类型 。
3、返回类型
sql
返回与该 check_expression 相同的类型 。 如果文本NULL作为check_expression提供,ISNULL则返回replacement_value的数据类型。 如果文本作为check_expression提供,并且未提供任何replacement_value,ISNULL则返回 int。 NULL
4、注解
sql
如果NULL不是,则返回check_expression的值。 否则,如果类型不同,则会在隐式转换为check_expression类型后返回replacement_value。 如果 replacement_value 长于 check_expression,则可能截断 replacement_value 。
5、示例
本文中的 Transact-SQL 代码示例使用 AdventureWorks2022 或 AdventureWorksDW2022 示例数据库
5.1、将 ISNULL 与 AVG 配合使用
以下示例查找所有产品的重量平均值。 它将替换表列中Product所有NULL条目Weight的值50。
sql
USE AdventureWorks2022;
GO
SELECT AVG(ISNULL(Weight, 50)) AS Avg_Weight
FROM Production.Product;
GO
-- 返回执行结果
Avg_Weight
---------------------------------------
59.790059
(1 行受影响)
5.2、使用 ISNULL
以下示例选择 AdventureWorks2022 中所有特价产品的说明、折扣百分比、最小量和最大量。 如果特定特殊产品/服务NULL的最大数量为,MaxQty则结果集中所示。0.00
sql
USE AdventureWorks2022;
GO
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'
FROM Sales.SpecialOffer;
GO
-- 返回执行结果
Description DiscountPct MinQty Max Quantity
------------------------------------------------------------ --------------------- ----------- ------------
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
(16 行受影响)
以下示例使用ISNULL字符串None替换NULL其Color值
sql
USE AdventureWorks2022;
GO
SELECT ProductID,
Name,
ProductNumber,
ISNULL(Color, 'None') AS Color
FROM Production.Product;
-- 返回执行结果
ProductID Name ProductNumber Color
----------- -------------------------------------------------- ------------------------- ---------------
1 Adjustable Race AR-5381 None
2 Bearing Ball BA-8327 None
3 BB Ball Bearing BE-2349 None
4 Headset Ball Bearings BE-2908 None
316 Blade BL-2036 None
317 LL Crankarm CA-5965 Black
318 ML Crankarm CA-6738 Black
319 HL Crankarm CA-7457 Black
320 Chainring Bolts CB-2903 Silver
321 Chainring Nut CN-6137 Silver
322 Chainring CR-7833 Black
323 Crown Race CR-9981 None
5.3、在 WHERE 子句中测试NULL
请勿用于 ISNULL 查找 NULL 值。 请改用 IS NULL。 下面的示例查找 weight 列中存在 NULL 的所有产品。 请注意 IS 和 NULL 之间的空格。
sql
USE AdventureWorks2022;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
-- 返回执行结果
Name Weight
-------------------------------------------------- ---------------------------------------
Adjustable Race NULL
Bearing Ball NULL
BB Ball Bearing NULL
Headset Ball Bearings NULL
Blade NULL
LL Crankarm NULL
ML Crankarm NULL