【MySQL】探索 MySQL 中的 NVL:使用 IFNULL 和 COALESCE 实现


缘分让我们相遇乱世以外
命运却要我们危难中相爱
也许未来遥远在光年之外
我愿守候未知里为你等待
我没想到为了你我能疯狂到
山崩海啸没有你根本不想逃
我的大脑为了你已经疯狂到
脉搏心跳没有你根本不重要
                     🎵 邓紫棋《光年之外》


什么是 NVL?

NVL 是 SQL 中常用的一个函数,最早出现在 Oracle 数据库中,用于替换 NULL 值。具体来说,NVL 函数接受两个参数,如果第一个参数为 NULL,则返回第二个参数;否则,返回第一个参数。

MySQL 中的 NVL 替代方法

虽然 MySQL 本身并不提供 NVL 函数,但可以使用 IFNULL 或 COALESCE 函数实现相同的功能。

IFNULL:接受两个参数,如果第一个参数为 NULL,则返回第二个参数;否则,返回第一个参数。
COALESCE:接受多个参数,返回第一个非 NULL 的参数。

使用 IFNULL 函数

基本语法
IFNULL(expr1, expr2)

expr1:要检查的表达式。
expr2:expr1 为 NULL 时返回的值。

示例

假设我们有一个名为 employees 的表,包含以下数据:

CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10, 2),commission DECIMAL(10, 2)
);INSERT INTO employees (name, salary, commission) VALUES
('Alice', 5000, NULL),
('Bob', 4500, 500),
('Charlie', NULL, 1000);
使用 IFNULL 将 NULL 值替换为 0:
SELECT name, salary, IFNULL(commission, 0) AS commission
FROM employees;

输出结果:

| name    | salary | commission |
|---------|--------|------------|
| Alice   | 5000.00| 0.00       |
| Bob     | 4500.00| 500.00     |
| Charlie | NULL   | 1000.00    |

使用 COALESCE 函数

基本语法
COALESCE(expr1, expr2, ..., expr_n)

expr1, expr2, …, expr_n:要检查的表达式列表,返回第一个非 NULL 的表达式。

示例

同样的 employees 表,使用 COALESCE 将 NULL 值替换为 0:

SELECT name, salary, COALESCE(commission, 0) AS commission
FROM employees;

输出结果与 IFNULL 相同:

| name    | salary | commission |
|---------|--------|------------|
| Alice   | 5000.00| 0.00       |
| Bob     | 4500.00| 500.00     |
| Charlie | NULL   | 1000.00    |
多个参数

COALESCE 可以接受多个参数,返回第一个非 NULL 的值:

SELECT name, COALESCE(salary, commission, 0) AS compensation
FROM employees;

输出结果:

| name    | compensation |
|---------|--------------|
| Alice   | 5000.00      |
| Bob     | 4500.00      |
| Charlie | 1000.00      |

应用场景

  1. 数据清理
    在数据清理过程中,常常需要处理 NULL 值。使用 IFNULL 或 COALESCE 可以轻松将 NULL 值替换为默认值,从而简化数据处理流程。

  2. 报表生成
    在生成报表时,为了避免 NULL 值影响计算和展示,可以使用 IFNULL 或 COALESCE 将 NULL 值替换为有意义的默认值。

  3. 业务逻辑处理
    在业务逻辑处理中,某些字段可能会出现 NULL 值。通过使用 IFNULL 或 COALESCE,可以确保在处理这些字段时不会出现意外错误。

实践示例

示例 1:计算总收入
假设我们要计算每个员工的总收入(工资 + 佣金),如果某个员工的工资或佣金为 NULL,则将其视为 0:

SELECT name, COALESCE(salary, 0) + COALESCE(commission, 0) AS total_income
FROM employees;

输出结果:

| name    | total_income |
|---------|--------------|
| Alice   | 5000.00      |
| Bob     | 5000.00      |
| Charlie | 1000.00      |

示例 2:替换空字符串
在某些情况下,字段值可能是空字符串而不是 NULL。可以结合使用 NULLIF 和 COALESCE 来处理这种情况:

SELECT name, COALESCE(NULLIF(name, ''), 'Unknown') AS employee_name
FROM employees;

输出结果:

| name    | employee_name |
|---------|----------------|
| Alice   | Alice          |
| Bob     | Bob            |
| Charlie | Charlie        |

结论

虽然 MySQL 中没有直接提供 NVL 函数,但我们可以通过使用 IFNULL 和 COALESCE 实现相同的功能。它们在数据清理、报表生成和业务逻辑处理中都表现出色,提供了灵活且强大的 NULL 值处理能力。希望这篇博客能够帮助你更好地理解和使用 MySQL 中的 IFNULL 和 COALESCE 函数,从而优化你的数据处理和查询操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch使用tensorboard的SummaryWriter报错

PyTorch使用tensorboard可以显示网络运行情况,但偶尔使用SummaryWriter时遇到Segmentation fault错误。 利用python3的faulthandler,可定位到出错的代码行,具体操作有两种方式如下: (1) 在代码中写入faulthandler import faulthandler # 在import之后直接添加以下启用代码…

探索数据结构:便捷的双向链表

🔑🔑博客主页:阿客不是客 🍓🍓系列专栏:渐入佳境之数据结构与算法 欢迎来到泊舟小课堂 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 ​​ 前言 前面我们学习了单链表,它解…

k8s常用命令(持续更新中)

1. 常用命令 # 查看命名空间下的所有pod kubectl get pod -n 命名空间 # 查看某命名空间下某个pod的日志 kubectl logs -f -n 命名空间 pod名# 查看某命名空间下某pod的详细信息 kubectl describe pod pod名 -n 命名空间# 查看所有命名空间下pod kubectl pods --all-namespac…

等保测评核心对象概览及实施要点

等保测评的对象主要包括以下几个方面: 1. 信息系统:由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统。常见的信息系统包括办公自动化系统(OA)、客户关系管理系统、进销存管理系统等。…

ICLR24大模型提示(3/11) | PromptAgent:利用语言模型进行战略规划,实现专家级提示优化

【摘要】高效的、针对特定任务的提示通常由专家精心设计,以整合详细的说明和领域见解,这些见解基于对大型语言模型 (LLM) 的本能和目标任务的复杂性的深刻理解。然而,自动生成这种专家级提示仍然难以实现。现有的提示优化方法往往忽视领域知识…

20240603每日AI------------项目引入Spring Cloud Alibaba AI (二)

项目源码解析 前端代码&#xff1a; <div class"container"><h1>Spring Cloud Alibaba AI Example</h1><form id"form"><label for"message">User Message&#xff1a;</label><input type"text&q…

大模型PEFT(一)之推理实践学习记录

1. 简介 多种模型: LLaMA、Mistral、Mixtral-MoE、Qwen、Yi、Gemmha、Baichuan、ChatGLM、Phi等等。集成方法:(增量)预训练、指令监督微调、奖励模型训练、PPO训练和DPO训练。多种精度:32比特全参数微调、16比特冻结微调、16比特LORA微调和基于AQLM/AWQ/GPTQ/LLM.int8 的2/4/8…

一篇文章掌握Java的80%:面向对象与并发编程

Java作为一种广泛使用的计算机编程语言&#xff0c;其强大之处在于其面向对象的特性和对并发编程的良好支持。作为一名程序员&#xff0c;我深知掌握Java的面向对象概念、集合框架、多线程与并发编程&#xff0c;以及JVM基础对于编写高效、可维护的代码至关重要。本文将引导你快…

操作字符串获取文件名字(包含类型)

记录一种操作字符串获取文件名字的操作方式&#xff0c;方便后期的使用。示例&#xff1a; 输入&#xff1a;"D:/code/Test/Test.txt" 输出&#xff1a;"Test.txt" 设计思路&#xff1a; 首先查找路径中最后一个”/“&#xff0c;然后再通过字符串截取的…

湖南源点调研 为什么中小企业产品上市前一定要做市场调研?

本文由湖南长沙&#xff08;产品前测&#xff09;源点调研咨询编辑发布 可能有很多企业主会表示&#xff0c;市场调研&#xff0c;产品调研&#xff0c;不都是大公司、大品牌、上市公司才会有的流程吗&#xff0c;像我们这种小企业、小品牌、小厂家没有必要去那么做&#xff0…

Python文本分词工具库-jieba

内容目录 一、分词二、设置分词三、词性信息四、关键词提取 jieba库是一个针对中文文本的分词工具库&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;领域的中文文本预处理阶段。 主要功能: 中文分词&#xff1a;能够将连续的中文文本切割成有意义的词语序列&a…

变压器中性点接地电阻柜的出厂标准是什么

变压器中性点接地电阻柜的出厂标准是什么&#xff1f; 现代电气配电系统中&#xff0c;接地电阻是保障人身安全的非常重要的设施。在高压电气设备中&#xff0c;中性点接地电阻柜的作用是限制设备中的过电流和短路故障所产生的电流&#xff0c;以保障人身安全。变压器中性点接…

杨辉三角形及其C语言实现

一、引言 杨辉三角形&#xff08;Pascal’s Triangle&#xff09;&#xff0c;又称帕斯卡三角形&#xff0c;是一个在数学中经常出现的数表。它的构造规则非常简单&#xff1a;三角形中的每个数字等于它上方两数字之和&#xff08;或者说&#xff0c;它是位于它肩上的两个数字…

开源VS闭源:大模型发展路径之争,你站哪一派?

文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…

解析“分层引流”在颅内感染治疗中的价值意义

临床中&#xff0c;化脓性颅内感染的治疗一直是界内关注的重点。近年来&#xff0c;得益于医疗技术的持续革新与提升&#xff0c;颅内感染的治疗方法也获得了不断的更新与优化。在此背景下&#xff0c;北京精诚博爱医院所倡导的“分层引流”理念&#xff0c;作为一种新兴的治疗…

外贸小白到销冠,如何30天快速提升?

外贸从业8年&#xff0c;在工厂从0-1做外贸&#xff0c;外贸的坑踩过很多&#xff0c;也做出了很多出色的业绩&#xff0c;希望这篇文章可以给到外贸新人快速提升的思路。 对于刚刚进入外贸行业的职场新人&#xff1f;应该怎么做&#xff1f; 第一个月应该学什么&#xff1f;…

什么牌子的开放式耳机质量好?2024超强实力派品牌推荐!

耳机对于一个音乐人有重要这个不必多说&#xff0c;我朋友是个音乐编辑&#xff0c;他经常需要长时间佩戴耳机进行音频编辑和混音工作。在尝试过多款开放式耳机后&#xff0c;都没找到合适的。今天&#xff0c;我将从专业角度为大家带来几款热门开放式耳机的测评报告&#xff0…

第二证券炒股知识:股票内盘外盘代表什么意思?

股票内盘是主动性卖盘&#xff0c;表明以买入价成交的股数&#xff0c;持股的投资者主动以等于或是低于买一、买二、买三、买四、买五的价格卖出手中持有的股份&#xff0c;买入成交数量核算参加内盘。 股票外盘是主动性买盘&#xff0c;表明以卖出价成交的股数&#xff0c;场…

跟着大佬学RE(一)

学了一个 map&#xff08;&#xff09;函数的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函数将 rawData 中的每个字符传递给 ord 函数。ord 函数返回给定字符的 Unicode 码点 print(target) # 打印 map 对象的内存地址&…

电脑中病毒了怎么办?7招教你保护电脑安全!

“不知道怎么回事&#xff0c;我的电脑莫名其妙就中病毒了&#xff0c;实在不知道应该怎么操作了&#xff0c;希望大家可以帮我&#xff01;” 在数字化时代的浪潮中&#xff0c;电脑已成为我们生活与工作中不可或缺的一部分。然而&#xff0c;就像任何事物都有其阴暗面一样&am…