COALESCE() 函数可以接收多个参数,并返回第一个非 NULL 的参数。如果所有参数都为 NULL,则 COALESCE() 函数返回 NULL。

例如:

COALESCE(NULL, 1, 2); # => 1

COALESCE(NULL, 'hi'); # => 'hi'

COALESCE(4, NULL, 2); # => 4

COALESCE(NULL, NULL); # => NULL

使用场景

1. 设置默认值

下面的表中,discount 为 NULL 意味着 discount 为 0。

mysql> desc for_sale;

+-----------+-----------+---------------+

| name | price | discount |

+-----------+-----------+---------------+

| orange | 200 | NULL |

| apple | 100 | 23 |

| lemon | 150 | NULL |

+-----------+-----------+---------------+

计算折扣后的价格,则我们需要使用下面的 SQL:

SELECT name, price - COALESCE(discount, 0) AS real_price FROM for_sale;

因为 price – NULL = NULL,所以我们需要使用 COALESCE() 函数以便获得正确的结果。

2. 使用来自多个列的值

使用 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

FROM

articles;

+----+-------------------------+------------------------------------------------+---------------------+

| 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

FROM

articles;

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

+----+-------------------------+------------------------------------------------------+---------------------+

| 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 函数将返回 body 列中内容的前 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 则返回第一个参数,否则返回第二个参数;而 COALESCE 函数使用 n 个参数。如果参数的数量为 2,则两个函数都相同。

mysql里COALESCE_MySQL 技巧:COALESCE 函数的使用相关推荐

  1. PHP lareal_怎么样能在mysql里结合php的函数

    数据库里的经纬度想和当前定位地点的经纬度进行计算,差值最小的数据排在前面,也就是按距离排序,这个函数已经有了,就是不知道怎么结合mysql查询 /** * 计算两个坐标之间的距离(米) * @para ...

  2. MySQL高级 - SQL技巧 -日期函数与聚合函数

    日期函数 函数名称 作 用 CURDATE 和 CURRENT_DATE 两个函数作用相同,返回当前系统的日期值 CURTIME 和 CURRENT_TIME 两个函数作用相同,返回当前系统的时间值 ...

  3. MySQL高级 - SQL技巧 - 数字函数与字符串函数

    数字函数 函数名称 作 用 ABS 求绝对值 SQRT 求二次方根 MOD 求余数 CEIL 和 CEILING 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 FLOOR 向下取整,返回 ...

  4. mysql中discount用法_MySQL 技巧:COALESCE 函数的使用

    COALESCE() 函数可以接收多个参数,并返回第一个非 NULL 的参数.如果所有参数都为 NULL,则 COALESCE() 函数返回 NULL. 例如: COALESCE(NULL, 1, 2 ...

  5. c mysql生成随机数函数,MySQL的指定范围随机数函数rand()的使用技巧

    公式如下: rand() * (y-x) + x 咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数 ...

  6. MySQL coalesce()函数

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

  7. mysql异常关闭7034,SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数

    SQL NULL 函数 SQL ISNULL().NVL().IFNULL() 和 COALESCE() 函数 请看下面的 "Products" 表: P_Id ProductNa ...

  8. 【MySQL】COALESCE( )函数

    COALESCE()函数 主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下: COALESCE ( expression,value1,value2--,va ...

  9. Mysql里where语句里不能使用SUM聚合函数筛选怎么办?

    现有这样一个需求: 在一个电商订单管理平台中,我想查看所有已付款订单中,哪些订单是有部分退款的. 一开始思路是这样是没错的: 在订单详情表里的num数量和大于退款详情表里的num数量之和即可,也就是S ...

最新文章

  1. jQuery插件开发--(转)
  2. (转载)你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化
  3. 中object转为list集合_java基础集合小结
  4. 计算机的定点运算器原理,计算机组成原理第二章第10讲定点运算器的组成.ppt
  5. 面试官系统精讲Java源码及大厂真题 - 08 HashMap 源码解析
  6. umts是移动还是联通_联通与电信合建5G:核心网各自建设 5G频率资源共享
  7. Quick-cocos2d-x luabinding
  8. 【20180712】Nginx 参数优化和内核参数优化
  9. java基本数据类型的数值范围
  10. 英语中比较重要的动词
  11. QT编写USB PRINTER驱动
  12. rx.xxx 和 io.reactivex.xxx RxJava1 和 RxJava2 和 RxJava3
  13. 阿里李睿博谈自己的折腾路:整个过程爱最重要
  14. 你的孩子,未来20年将面临怎样的阶层分化?
  15. “模式识别”技术识别12306验证码
  16. 回环地址--Loopback
  17. 51单片机学习:红外遥控实验
  18. 如何使用VS打包C++程序
  19. 25个Python常用库
  20. 怎么用微信在蘑菇街结算

热门文章

  1. minecraft崩溃java,如何修复Minecraft崩溃?免费知识库 | MOS86
  2. 基于Pygame开发的最完美的飞机大战游戏
  3. ListView异步加载图片,完美实现图文混排
  4. 其知可及,其愚不可及也
  5. CS269I:Incentives in Computer Science 学习笔记 Lecture 12 对称信息和声誉系统
  6. 新年闲话网名之-----枫速向航
  7. 2020二级c语言成绩查询入口,2020年全国计算机等级考试一本通 二级C语言
  8. Raspberry Pi 3 入门 安装Raspbian系统 使用NOOBS傻瓜工具 超超超超超简单
  9. 学魅族手滑,中兴红牛V5抢购标错价
  10. Caffeine使用分享