热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQLcoalesce()函数

转载自MySQLcoalesce()函数MySQLCOALESCE函数介绍下面说明了COALESCE函数语法:COALESCE(value1,value2,..

转载自  MySQL coalesce()函数


MySQL COALESCE函数介绍

下面说明了COALESCE函数语法:

COALESCE(value1,value2,...);

COALESCE函数需要许多参数,并返回第一个非NULL参数。如果所有参数都为NULL,则COALESCE函数返回NULL

以下显示了使用COALESCE函数的一些简单示例:

mysql> SELECT COALESCE(NULL, 0); -- 0
SELECT COALESCE(NULL, NULL); -- NULL
+-------------------+
| COALESCE(NULL, 0) |
+-------------------+
| 0 |
+-------------------+
1 row in set+----------------------+
| COALESCE(NULL, NULL) |
+----------------------+
| NULL |
+----------------------+
1 row in set

 


MySQL COALESCE函数示例

请参见示例数据库(yiibai)中的以下customers表。

mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber | int(11) | NO | PRI | NULL | |
| customerName | varchar(50) | NO | | NULL | |
| contactLastName | varchar(50) | NO | | NULL | |
| contactFirstName | varchar(50) | NO | | NULL | |
| phone | varchar(50) | NO | | NULL | |
| addressLine1 | varchar(50) | NO | | NULL | |
| addressLine2 | varchar(50) | YES | | NULL | |
| city | varchar(50) | NO | | NULL | |
| state | varchar(50) | YES | | NULL | |
| postalCode | varchar(15) | YES | | NULL | |
| country | varchar(50) | NO | | NULL | |
| salesRepEmployeeNumber | int(11) | YES | MUL | NULL | |
| creditLimit | decimal(10,2) | YES | | NULL | |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set

以下查询返回orders表中所有客户的客户名称,城市,州和国家。

SELECT customerName, city, state, country
FROMcustomers;

执行上面查询语句,得到以下结果 -

+------------------------------------+-------------------+---------------+--------------+
| customerName | city | state | country |
+------------------------------------+-------------------+---------------+--------------+
| Atelier graphique | Nantes | NULL | France |
| Signal Gift Stores | Las Vegas | NV | USA |
| Australian Collectors, Co. | Melbourne | Victoria | Australia |
| La Rochelle Gifts | Nantes | NULL | France |
| Baane Mini Imports | Stavern | NULL | Norway |
************** 此处省略了一大波数据 ******************************************************
| Motor Mint Distributors Inc. | Philadelphia | PA | USA |
| Signal Collectibles Ltd. | Brisbane | CA | USA |
| Double Decker Gift Stores, Ltd | London | NULL | UK |
| Diecast Collectables | Boston | MA | USA |
| Kelly's Gift Shop | Auckland | NULL | New Zealand |
+------------------------------------+-------------------+---------------+--------------+
122 rows in set

如您所见,state列具有NULL值,因为某些此类信息不适用于某些客户的国家/地区。

要替换结果集中的NULL值,可以使用COALESCE函数,如下查询所示:

SELECT customerName, city, COALESCE(state, 'N/A'), country
FROMcustomers;

执行上面查询语句,得到以下结果 -

+------------------------------------+-------------------+------------------------+--------------+
| customerName | city | COALESCE(state, 'N/A') | country |
+------------------------------------+-------------------+------------------------+--------------+
| Atelier graphique | Nantes | N/A | France |
| Signal Gift Stores | Las Vegas | NV | USA |
| Australian Collectors, Co. | Melbourne | Victoria | Australia |
| La Rochelle Gifts | Nantes | N/A | France |
| Baane Mini Imports | Stavern | N/A | Norway |
| Mini Gifts Distributors Ltd. | San Rafael | CA | USA |
| Havel & Zbyszek Co | Warszawa | N/A | Poland |
| Blauer See Auto, Co. | Frankfurt | N/A | Germany |
************** 此处省略了一大波数据 ******************************************************
| Kremlin Collectables, Co. | Saint Petersburg | N/A | Russia |
| Raanan Stores, Inc | Herzlia | N/A | Israel |
| Iberia Gift Imports, Corp. | Sevilla | N/A | Spain |
| Motor Mint Distributors Inc. | Philadelphia | PA | USA |
| Signal Collectibles Ltd. | Brisbane | CA | USA |
| Double Decker Gift Stores, Ltd | London | N/A | UK |
| Diecast Collectables | Boston | MA | USA |
| Kelly's Gift Shop | Auckland | N/A | New Zealand |
+------------------------------------+-------------------+------------------------+--------------+
122 rows in set

在这个例子中,如果state列中的值为NULL,则COALESCE函数将用N/A字符串代替。 否则,它返回state列的值。

使用COALESCE函数的另一个典型例子是当指定的一列为NULL时,将其中的值使用另一列来替换。

假设有一个具有以下结构的articles表:

USE testdb;
CREATE TABLE articles (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,excerpt TEXT,body TEXT NOT NULL,published_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

我们向articles表中插入一些数据。

INSERT INTO articles(title,excerpt,body)
VALUES('MySQL COALESCE Tutorial','This tutorial is about MySQL COALESCE function', 'all about COALESCE function'),('MySQL 8.0 New Features',null, 'The following is a list of new features in MySQL 8.0');

想象一下,假设必须在概述页面上显示文章,其中每篇文章包含标题,摘录和发布日期(以及链接的文章页面)。需要做的第一个任务是从文章表查询此数据:

mysql> SELECT id, title, excerpt, published_at
FROMarticles;
+----+-------------------------+------------------------------------------------+---------------------+
| id | title | excerpt | published_at |
+----+-------------------------+------------------------------------------------+---------------------+
| 1 | MySQL COALESCE Tutorial | This tutorial is about MySQL COALESCE function | 2017-08-10 23:46:35 |
| 2 | MySQL 8.0 New Features | NULL | 2017-08-10 23:46:35 |
+----+-------------------------+------------------------------------------------+---------------------+
2 rows in set

可以看到id=2的文章没有摘要,显示文章时可能没有导读内容了。

一个典型的解决方案是获取文章正文中指定长度内容,用来代替显示摘录。这时就可以使用COALESCE函数来实现了。

SELECT id, title, COALESCE(excerpt, LEFT(body, 150)), published_at
FROMarticles;

执行上面查询语句,得到以下结果 -

+----+-------------------------+------------------------------------------------------+---------------------+
| id | title | COALESCE(excerpt, LEFT(body, 150)) | published_at |
+----+-------------------------+------------------------------------------------------+---------------------+
| 1 | MySQL COALESCE Tutorial | This tutorial is about MySQL COALESCE function | 2017-08-10 23:46:35 |
| 2 | MySQL 8.0 New Features | The following is a list of new features in MySQL 8.0 | 2017-08-10 23:46:35 |
+----+-------------------------+------------------------------------------------------+---------------------+
2 rows in set

在此示例中,如果excerpt列中的值为NULL,则COALESCE函数将返回oody列中内容的前150个字符。

 


MySQL COALESCE和CASE表达式

除了使用COALESCE函数,可以使用CASE表达式实现相同的效果。

以下查询使用CASE表达式实现与上述示例相同的结果:

SELECT id,title,(CASEWHEN excerpt IS NULL THEN LEFT(body, 150)ELSE excerptEND) AS excerpt,published_at
FROMarticles;

在这个例子中,CASE表达式比使用COALESCE函数实现代码更长。

 


MySQL COALESCE与IFNULL对比

IFNULL函数接受两个参数,如果不为NULL则返回第一个参数,否则返回第二个参数。

IFNULL函数有两个参数,而COALESCE函数使用n个参数。如果参数的数量为2,则两个函数都相同。

在本教程中,您已经学习了如何使用MySQL COALESCE函数来替换NULL值。


推荐阅读
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 数据类型和操作数据表2.1MySQL类型之整型2.2MySQL数据类型之浮点型2.3日期时间型DATE1支持时间:1000年1月1日~9999年12月31日DATETIME ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 在MySQL中实现时间比较功能的详细解析与应用
    在MySQL中实现时间比较功能的详细解析与应用。本文深入探讨了MySQL中时间比较的实现方法,重点介绍了`UNIX_TIMESTAMP`函数的应用。该函数可以接收一个日期时间参数,也可以不带参数使用,其返回值为Unix时间戳,便于进行时间的精确比较和计算。此外,文章还涵盖了其他相关的时间处理函数和技巧,帮助读者更好地理解和掌握MySQL中的时间操作。 ... [详细]
  • MySQL 错误:检测到死锁,在尝试获取锁时;建议重启事务(Node.js 环境)
    在 Node.js 环境中,MySQL 数据库操作时遇到了“检测到死锁,在尝试获取锁时;建议重启事务”的错误。本文将探讨该错误的原因,并提供有效的解决策略,包括事务管理优化和锁机制的理解。 ... [详细]
author-avatar
jajajaja幸福_348
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有