跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

Sql Server 中 ISNULL、IIF 与 CASE WHEN 的空值判断用法

介绍 SQL Server 中处理空值的三种方法:ISNULL、CASE WHEN 和 IIF 函数,并对比了 CONCAT 拼接字符串的安全性及 EXISTS 替代 IN 的性能优化技巧。

moshang发布于 2026/3/22更新于 2026/7/1027K 浏览
Sql Server 中 ISNULL、IIF 与 CASE WHEN 的空值判断用法

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;

小技巧(使用 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 直接表达了'是否存在'的逻辑意图。
  • 在子查询结果集很大时,性能提升尤为明显。

目录

  1. ISNULL 用法
  2. CASE WHEN 用法
  3. IIF
  4. 查询小技巧
  5. 技巧一:使用 CONCAT 安全地拼接字符串
  6. 技巧二:使用 EXISTS 代替 IN 来检查存在性
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw Gateway 服务运维:启动、停止与监控
  • Android WebView shouldInterceptRequest 异步加载
  • 无人机 AI 算法全景图:7 大场景 50+ 算法详解
  • 自然语言处理在法律领域的应用与实战
  • C/C++ 格式化输入输出详解:snprintf 与 sscanf
  • 程序员如何避免 35 岁职业危机:提升经济实力与专业技能
  • Python+AI 构建每日新闻简报:聚合热搜、智能摘要与语音播报
  • 二分查找实战:旋转数组最小值与点名问题
  • 增强现实(AR)技术全解析:从概念到应用
  • Spring Boot Web 三大核心交互实战:表单、AJAX 与 JSON
  • Spring Boot 数据仓库与 ETL 工具集成实战
  • C++ STL string 类从零实现详解
  • JavaScript 表单验证禁用与选择框属性操作指南
  • OpenClaw 在 Linux 下配置本地 Ollama 实战指南
  • Kimi Code CLI 实战:新一代 AI 编程助手深度解析
  • 归并排序时间复杂度 O(nlogn) 解析:排序链表实现
  • AI 时代技术民主化:为何文科生或成最大受益者
  • Flutter for OpenHarmony 实战:邮件 App 动画架构与性能优化
  • 金仓 SQL 防火墙:原理、模式与性能实测
  • PostgreSQL 备份有效性验证指南:从逻辑到物理的灾备演练

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online