Sql Server数据库中isnull、iif、case when三种方式的使用和空值判断
|
zhenglin
2025年9月30日 16:10
本文热度 564
|
ISNULL用法
在 SQL Server中,ISNULL
函数只接受两个参数,不支持三个参数的情况。
博主刚开始是这么用的 ISNULL(t11.ItemCode,'Y','N')
,这种写法是错误的。
ISNULL
函数的正确语法是:
ISNULL(check_expression, replacement_value)
case when用法
如果需要实现类似三个参数的功能(当字段为 NULL 时返回 ‘Y’,否则返回 ‘N’),可以使用 CASE WHEN
表达式:
CASE WHEN t11.ItemCode IS NULL THEN 'Y' ELSE 'N' END
iif
或者使用更简洁的 IIF
函数(SQL Server 2012 及以上版本支持):
IIF(t11.ItemCode IS NULL, 'Y', 'N')
查询小技巧
技巧一
使用 CONCAT
安全地拼接字符串
问题: 传统的用加号 +
拼接字符串时,如果任何一个字段为 NULL
,整个结果都会变成 NULL
。
旧方法(有风险):
SELECT FirstName + ' ' + LastName AS FullName
FROM Employees;
-- 如果 FirstName 或 LastName 为 NULL,FullName 就会显示为 NULL
小技巧(使用 CONCAT
):
SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;
好处:
技巧二
使用 EXISTS
代替 IN
来检查存在性
问题: 当使用 IN
子查询时,数据库需要先执行整个子查询,返回所有结果集,然后再进行主查询和子查询结果的匹配,如果子查询结果集很大,性能会较差。
旧方法(可能低效):
SELECT *
FROM Customers
WHERE CustomerID IN (
SELECT DISTINCT CustomerID
FROM Orders
WHERE OrderDate > '2023-01-01'
);
小技巧(使用 EXISTS
):
SELECT *
FROM Customers c
WHERE EXISTS (
SELECT 1
FROM Orders o
WHERE o.CustomerID = c.CustomerID
AND o.OrderDate > '2023-01-01'
);
好处:
这两个技巧一个侧重于数据的可靠性和整洁性,另一个侧重于查询的性能优化,都是日常开发中非常实用的“利器”。
参考文章:原文链接
该文章在 2025/9/30 16:10:53 编辑过