LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Sql Server数据库中isnull、iif、case when三种方式的使用和空值判断

zhenglin
2025年9月30日 16:10 本文热度 545

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;


好处:

  • CONCAT 函数会自动将 NULL 值视为空字符串 '' 来处理。

  • 即使 FirstName 或 LastName 为 NULL,其他部分依然会正常拼接,最终结果不会是 NULL。

  • 代码更简洁易读。



技巧二

使用 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'

);


好处:

  • 性能更高EXISTS 是一种关联子查询,一旦找到一条满足条件的记录就会立即返回 True 并停止搜索,避免了处理整个子查询结果集。

  • 语义更清晰EXISTS 直接表达了“是否存在”的逻辑意图。

  • 在子查询结果集很大时,性能提升尤为明显。


这两个技巧一个侧重于数据的可靠性和整洁性,另一个侧重于查询的性能优化,都是日常开发中非常实用的“利器”。


参考文章:原文链接


该文章在 2025/9/30 16:10:01 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved