MySQL coalesce()函数

转载自  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值。

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

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

相关文章

2018蓝桥杯省赛---java---C---8(等腰三角形)

题目描述 问题描述本题目要求你在控制台输出一个由数字组成的等腰三角形。 具体的步骤是:先用1,2,3,…的自然数拼一个足够长的串 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。 比如,当三角形高度是8时:1…

Git,Git Flow,GitLab使用指南

高效利用一次蹲坑时间,看看如何使用Git Flow进行高效开发,什么才是Git提交的正确姿势,怎样使用GitLab进行Code Review: 使用Git Flow高效开发;Git提交正确姿势,Commit message编写指南;使用Git…

arm linux gcc 编译,Linux arm-linux-gcc交叉编译环境配置

Linux下的arm-linux-gcc交叉编译环境安装安装arm-linux-gcc(1) 打开终端,使用sudo命令进入从超级管理员:sudo su输入超级管理员密码。(2) 使用cd命令进入桌面:cd Desktop(3)复制arm-linux-gcc-4.4.3.tar.gz安装包到Ubuntu桌面下面(4)打开终端…

MySQL greatest()和least()函数

转载自 MySQL greatest()和least()函数 MySQL GREATEST和LEAST函数介绍 GREATEST和LEAST函数都使用N个参数,并分别返回最大和最小值。下面说明GREATEST和LEAST函数的语法: GREATEST(value1, value2, ...); LEAST(value1,value2,...);参数可能具有混合…

环东风尚注注意事项

1.先对钱(现金)。 2.看美团和飞猪上的订单。 3.根据订单在订单表上做预订。 4.对本子上入住的人是否和电脑上的一致。 5.对房卡和电脑上的是否一致。 6.查看退宿的身份证是否已退。 退房: 1.先退钱 2.退身份证 3.退卡 开房: 1.收…

2019蓝桥杯省赛---java---C---1(求和)

题目描述 代码实现 package TEST;public class Main {public static void main(String[] args) {int cnt 0;for (int i 1; i < 2019; i)if (check(i)) cnt i;System.out.print(cnt);}static boolean check(int n) {String an"";if (a.contains("2")…

使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表

昨天&#xff08;星期五&#xff09;下班&#xff0c;19&#xff1a;00左右回到家&#xff0c;洗个澡&#xff0c;然后20&#xff1a;30左右开始写代码&#xff0c;写完代码之后&#xff0c;上床看了《生活大爆炸10季》17、18两集&#xff0c;发现没有更新到19集&#xff0c;瞄…

cs1.5 linux服务端,Linux下架设CS1.5服务器

所需文件&#xff1a;1、hlds_l_3110_full.bin2、cs_15_full.tar.gz3、engine_i386.so(据说这个东东可以免cdkey&#xff0c;可我不用也可免cdkey)把所有的文件都拷贝到/usr/cs目录下&#xff1a;# chmod x hlds_l_3110_full.bin# tar xzvf hlds_l_3110_full.tar.gz# tar xzvf …

MySQL isnull()函数基本指南

转载自 MySQL isnull()函数基本指南 MySQL ISNULL函数简介 ISNULL函数接受一个参数&#xff0c;并测试该参数是否为NULL。如果参数为NULL&#xff0c;则ISNULL函数返回1&#xff0c;否则返回0。 下面说明了ISNULL函数的语法&#xff1a; ISNULL(expr)请考虑以下示例&#…

ppt2010基础操作笔记

一、PPT2010的界面&#xff1a; 1.功能选项卡 2.大纲区 3.标题栏 4.备注页 5.状态栏 6.工作区 二、创建PPT演示文稿 1.开始–》PPT2010 2.在PPT里面新建–》文件–》新建–》样本模板–》选择模板。 三、PPT2010中的视图&#xff1a; 1.普通视图 2.大纲视图 3.幻灯…

2019蓝桥杯省赛---java---C---2(矩阵切割)

题目描述 代码实现 package TEST;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int max sc.nextInt();int min sc.nextInt();int sum 0, temp;while (max ! 0 && min ! 0) {if (max …

期待微软平台即服务技术Service Fabric 开源

微软的Azure Service Fabric的官方博客在3.24日发布了一篇博客 Service Fabric .NET SDK goes open source &#xff0c;介绍了社区呼声最高的Service Fabric开源的情况以及当前的情况&#xff0c;这次开源了Service Fabric的.NET SDK部分&#xff0c;主要是两个&#xff1a; …

java中input表单中的type=date返回类型【切记】

input表单中的type”date”返回类型为Date类型&#xff01; input表单中的type”date”返回类型为Date类型&#xff01; input表单中的type”date”返回类型为Date类型&#xff01; 重要的内容说三遍&#xff0c;今晚可算是及坑死我了&#xff0c;一直以为是String类型 &…

全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解

安装系统的话&#xff0c;常用方式就是通过U盘&#xff0c;光盘&#xff0c;kickstart网络自动化安装&#xff0c;网络自动化安装固然好&#xff0c;但是有时候在现场做项目的话根本就没有kickstart环境&#xff0c;甚至连基本的网络建设都没有弄好&#xff0c;此时该如何安装系…

MySQL last_insert_id()函数

转载自 MySQL last_insert_id()函数 MySQL LAST_INSERT_ID函数简介 在数据库设计中&#xff0c;我们经常使用代理键使用AUTO_INCREMENT属性为主键列生成唯一的整数值。 当您将新行插入到具有AUTO_INCREMENT列的表中时&#xff0c;MySQL会自动生成一个唯一的整数&#xff0c…

2019蓝桥杯省赛---java---C---4(质数)

题目描述 代码实现 package TEST; public class Main {public static void main(String[] args) {int cnt 0;for (int i 2; ; i )if(check(i)){cnt ;if(cnt 2019){System.out.println(i);break;}}}public static boolean check(int n){//判断一个数是否为质数for (int i 2…

eclipse下载与安装步骤详解,包含解决错误(最全最详细)

以前一直用的是myeclipse,今天有幸接触eclipse,那我们就先来安装的配置一下&#xff0c;下载地址&#xff1a;点击下载密码&#xff1a;h0kg&#xff0c;下载完成以后就可以安装了&#xff0c;首先我们来先安装jdk1.7, 打开jdk的安装包 双击即可&#xff0c; 直接点击下一步&…

CoreCLR文档翻译 - GC的设计

此文档来源于CoreCLR的BOTR(The Book of the Runtime), 点击打开原文一切著作权归微软公司所有 GC的设计 作者: Maoni Stephens (maoni0) - 2015 提示: 推荐看 The Garbage Collection Handbook 这本书学习更多关于GC的知识 (在文章底部的链接中) 组件结构 在GC中有两个主…

MySQL cast()函数

转载自 MySQL cast()函数 MySQL CAST函数介绍 MySQL CAST()函数的语法如下&#xff1a; CAST(expression AS TYPE);CAST()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一&#xff1a;BINARY&#xff0c;CHAR&#xff0c;DATE&#xff0c;DATETIME…

linux 编译 expat,关于expat库的编译

1、expat库简介refer to wiki:To use the Expat library, programs first register handler functions with Expat. When Expat parses an XML document, it calls the registered handlers as it finds relevant tokens in the input stream. These tokens and their associat…