MySQL COALESCE函数
简介:本教程向您介绍MySQL COALESCE函数,该函数允许您替换NULL值。
MySQL COALESCE函数简介
下面说明了COALESCE函数的语法:
COALESCE(value1,value2,...);
COALESCE函数采用多个参数并返回第一个非NULL参数。
如果所有参数均为NULL,则COALESCE函数返回NULL。
下面显示了使用COALESCE函数的一些简单示例:
SELECT COALESCE(NULL, 0); -- 0 SELECT COALESCE(NULL, NULL); -- NULL;
MySQL COALESCE函数示例
请参阅示例数据库中的以下客户表。
以下查询返回客户表中所有客户的客户名称,城市,州和国家/地区。
SELECT customerName, city, state, country FROM customers;
如您所见,"状态"列具有NULL值,因为某些信息不适用于某些客户所在的国家/地区。
要在结果集中替换NULL值,可以使用COALESCE函数,如下所示:
SELECT customerName, city, COALESCE(state, 'N/A'), country FROM customers;
在此示例中,如果状态列中的值为NULL,则COALESCE函数将其替换为N / A字符串。
否则,它将返回状态列的值。
使用COALESCE函数的另一个典型示例是,当第一列为NULL时,用另一列替换值。
假设您有一个具有以下结构的articles表:
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');
假设您必须在概述页面上显示文章,其中每篇文章都包含标题,专家和发布日期(还有阅读更多链接,文章页面)。
您需要做的第一个任务是从articles表中查询此数据:
SELECT id, title, excerpt, published_at FROM articles;
如您所见,id为2的文章没有摘录,因此显示不佳。
一种典型的解决方案是获取文章正文中的第一个字符以作为摘录显示。
这就是为什么COALESCE函数起作用的原因。
SELECT id, title, COALESCE(excerpt, LEFT(body, 150)), published_at FROM articles;
在此示例中,如果摘录列中的值为NULL,则COALESCE函数将返回正文列中内容的前150个字符。
MySQL COALESCE和CASE表达式
除了使用COALESCE函数之外,您还可以使用CASE表达式来达到相同的效果。
以下查询使用CASE表达式获得与以上示例相同的结果:
SELECT id, title, (CASE WHEN excerpt IS NULL THEN LEFT(body, 150) ELSE excerpt END) AS excerpt, published_at FROM articles;
在此示例中,CASE表达式比使用COALESCE函数更长。
MySQL COALESCE与IFNULL
IFNULL函数接受两个参数,如果不为NULL,则返回第一个参数,否则,返回第二个参数。
IFNULL函数适用于两个参数,而COALESCE函数适用于n个参数。
如果参数个数为两个,则两个函数相同。
在本教程中,您学习了如何使用MySQL COALESCE函数替代NULL值。