MariaDB COALESCE() 函数的基础用法与实例

本文将介绍一个常用的控制流函数,COALESCE(),它用于返回第一个非空的参数。

发布于

MariaDB 是一个开源的关系型数据库管理系统,它是 MySQL 的一个分支,兼容 MySQL 的语法和功能。MariaDB 提供了许多内置的函数,用于对数据进行各种操作和处理。本文将介绍一个常用的控制流函数,COALESCE(),它用于返回第一个非空的参数。

语法

COALESCE() 函数的语法如下:

COALESCE(value1, value2, ..., valueN)

其中,value1, value2, ..., valueN 是要检查的参数,可以是任意类型的表达式,可以是常量,变量,列名,或者子查询等。参数的个数可以是任意多,但至少要有一个。如果所有的参数都为 NULL,则函数返回 NULL

COALESCE() 函数返回的是第一个非空的参数的值,如果没有找到非空的参数,则返回 NULLCOALESCE() 函数的返回值的类型取决于参数的类型,一般遵循以下规则:

  • 如果所有的参数都是数值类型,则返回值的类型是最宽的数值类型,例如,如果参数中有 DECIMAL 类型,则返回值的类型是 DECIMAL
  • 如果所有的参数都是日期和时间类型,则返回值的类型是最宽的日期和时间类型,例如,如果参数中有 DATETIME 类型,则返回值的类型是 DATETIME
  • 如果所有的参数都是字符串类型,则返回值的类型是最宽的字符串类型,例如,如果参数中有 TEXT 类型,则返回值的类型是 TEXT
  • 如果参数中有不同类型的参数,则返回值的类型是根据参数的类型进行隐式转换后的类型,例如,如果参数中有 INT 类型和 VARCHAR 类型,则返回值的类型是 VARCHAR

实例

下面给出一些使用 COALESCE() 函数的实例,以及相应的代码和输出结果。

实例 1:返回一个常量列表中的第一个非空值

SELECT COALESCE(NULL, 1, 2, 3);
+-------------------------+
| COALESCE(NULL, 1, 2, 3) |
+-------------------------+
|                       1 |
+-------------------------+

实例 2:返回一个变量列表中的第一个非空值

SET @a = NULL;
SET @b = 10;
SET @c = 20;
SELECT COALESCE(@a, @b, @c);
+----------------------+
| COALESCE(@a, @b, @c) |
+----------------------+
| 10                   |
+----------------------+

实例 3:返回一个列名列表中的第一个非空值

CREATE TABLE test (
  id INT,
  name VARCHAR(20),
  age INT
);

INSERT INTO test VALUES (1, 'Alice', 25), (2, NULL, 30), (3, 'Bob', NULL);

SELECT id, COALESCE(name, age, 'Unknown') FROM test;
+------+--------------------------------+
| id   | COALESCE(name, age, 'Unknown') |
+------+--------------------------------+
|    1 | Alice                          |
|    2 | 30                             |
|    3 | Bob                            |
+------+--------------------------------+

实例 4:返回一个子查询中的第一个非空值

SELECT COALESCE(
  (SELECT name FROM test WHERE id = 1),
  (SELECT name FROM test WHERE id = 2),
  (SELECT name FROM test WHERE id = 3)
);
+------------------------------------------------------------------------------------------------------------------------------------+
| COALESCE(
  (SELECT name FROM test WHERE id = 1),
  (SELECT name FROM test WHERE id = 2),
  (SELECT name FROM test WHERE id = 3)
) |
+------------------------------------------------------------------------------------------------------------------------------------+
| Alice                                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------+

实例 5:返回一个不同类型的参数列表中的第一个非空值

SELECT COALESCE(NULL, 'Hello', 123, TRUE);
+------------------------------------+
| COALESCE(NULL, 'Hello', 123, TRUE) |
+------------------------------------+
| Hello                              |
+------------------------------------+

相关函数

除了 COALESCE() 函数外,MariaDB 还提供了一些其他的控制流函数,用于根据不同的条件返回不同的值。下面列举了一些常用的控制流函数,并给出了简单的介绍和举例。

  • IF() 函数:根据一个布尔表达式的值,返回两个参数中的一个。
  • IFNULL() 函数:如果第一个参数为 NULL,则返回第二个参数,否则返回第一个参数。
  • NULLIF() 函数:如果两个参数相等,则返回 NULL,否则返回第一个参数。
  • CASE 表达式:根据一个表达式的值或者一系列的条件,返回不同的值。

例如,下面的语句使用了 IF() 函数和 CASE 表达式,根据一个数的奇偶性,返回不同的字符串。

SELECT IF(10 MOD 2 = 0, 'Even', 'Odd');

SELECT CASE 10 MOD 2
  WHEN 0 THEN 'Even'
  WHEN 1 THEN 'Odd'
  ELSE 'Unknown'
END;
+-----------------------------------------------------------------------------+
| CASE 10 MOD 2
  WHEN 0 THEN 'Even'
  WHEN 1 THEN 'Odd'
  ELSE 'Unknown'
END |
+-----------------------------------------------------------------------------+
| Even                                                                        |
+-----------------------------------------------------------------------------+

结论

本文介绍了 MariaDB 的一个常用的控制流函数,COALESCE(),它用于返回第一个非空的参数。本文还介绍了函数的语法,给出了一些实例,以及列举了一些相关的函数。