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中discount用法_MySQL 技巧:COALESCE 函数的使用相关推荐

  1. mysql中exeits用法_MySQL 8 在 Windows 下安装及使用

    MySQL 8 带来了全新的体验,比如支持 NoSQL.JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升.本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用 ...

  2. mysql中limit用法_MYSQL中LIMIT用法?

    慕莱坞7535251 LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数.1)其语法格式如下:LIMIT[位置偏移量,]行数其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分 ...

  3. mysql中when用法_Mysql 中的CASE WHEN 用法

    在SELECT语句查询中可以使用CASE WHEN对查询出来的结果,进行一个类似于if else的判断. 具体的用法 1. SELECT a.website_id, b.customer_name, ...

  4. mysql中flush用法_mysql flush用法

    今天仔细看了下Flush语法,同时在工作中也经常使用Flush命令,在这儿汇总下.MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_opti ...

  5. mysql 中like用法_mysql查询语句中like 的用法

    1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...

  6. mysql中discount用法,Discounts

    Discounts ⌘当前价格: 0 ⌘支持系统: OS X 10.11 ⌘开发者: ⌘服务支持: 官方页面 安全下载 累计下载次数: 45 Promotional items is one way ...

  7. mysql distinct 优化_Mysql应用分析MySQL中优化distinct的技巧

    <MysqL应用分析MysqL中优化distinct的技巧>要点: 本文介绍了MysqL应用分析MysqL中优化distinct的技巧,希望对您有用.如果有疑问,可以联系我们. sql用于 ...

  8. pdo mysql limit_PHP mysql中limit用法详解(代码示例)

    在MySQL中,LIMIT子句与SELECT语句一起使用,以限制结果集中的行数.LIMIT子句接受一个或两个offset和count的参数.这两个参数的值都可以是零或正整数. offset:用于指定要 ...

  9. Mysql中求两个时间差的小时数以及mysql中substring_index 用法

    Mysql中求两个时间差的小时数以及mysql中substring_index 用法 1.mysql中求两个时间的差,返回小时数:可以使用mysql的hour() 函数,具体如下: SQL code ...

最新文章

  1. 导师:学AI的不懂计算机视觉,那你别学了
  2. 27. FormPanel类的defaults属性
  3. 鸿蒙系统第五批公测,鸿蒙系统即将迎来二轮公测,nova机型增添其中
  4. 实用代码-C#之IP地址和整数的互转
  5. 《数据结构与算法》实验报告——无向图邻接表的构造
  6. html input日期值,input标签设置时间值
  7. IntelliJ IDEA for Mac在MacOS模式下的编译和运行快捷键(Compile and Run Shortcut)
  8. 千博HTML5自适应企业网站系统源码
  9. linux文件末尾 m,Linux7-删除nginx配置文件末尾的^M字符
  10. 31岁零基础转行软件测试,现已成功入职月薪14K+
  11. 用jsonp 解决跨域问题
  12. mybatis将字段改为null_【MyBatis入门到入土精讲】MyBatis介绍
  13. 《手把手教你移植InfoNES(到HANKER-LM4F232)》
  14. css_min-height、max-height、height详细讲解
  15. 有哪些公司为外贸独立站提供收款服务?
  16. linux+格式化磁盘格式化,Linux下的磁盘格式化
  17. 手把手教你使用 EndNote X9
  18. 毕业设计倒计时Day 173:开题答辩记录
  19. Vivado [Place 30-574]
  20. WiFi Easy Connect

热门文章

  1. SAP LE Shipment单据没有自动output之分析
  2. STC11L08XE_study01
  3. 短网址缩短网址源码Shortny v2.0.1
  4. 自律给你自由——设计布局的新姿势
  5. buuctf 梅花香之苦寒来 详解
  6. 20221206今天的世界发生了什么
  7. 迷你服务器开机无显示,迷你云服务器突然消失
  8. 2020-7-28 ------2021-2-2 年度总结
  9. 安卓调试|入门扫盲必备adb调试工具介绍、安装使用说明
  10. 绿茶餐厅二战港交所:王勤松夫妇控股,整体同店销售额不及2019年