MariaDB CASE 表达式使用指南

在 MariaDB 中,CASE 是一个内置的表达式,它类似于 if-elseif-else,用于流程控制中的多分支情况。

您可以使用 CASE 运算符来比较条件列表,并根据匹配的条件(如果有的话)返回不同的结果。

MariaDB CASE 语法

这里是 MariaDB CASE 语句的语法:

CASE value
    WHEN compare_value THEN result
    [WHEN compare_value THEN result ...]
    [ELSE result]
END

或者

CASE
    WHEN condition THEN result
    [WHEN condition THEN result ...]
    [ELSE result]
END

返回值

MariaDB CASE 表达式返回 condition 为真或者 value = compare_value 为真的 THEN 子句中指定的值。

MariaDB CASE 示例

CASE 语句用于多个逻辑判断分支的情况。下面的例子展示了如何通过工作日索引(06)返回对应的工作日的名称。

首先,让我们创建一个表 test_case_weekday 用于演示。

DROP TABLE IF EXISTS test_case_weekday;
CREATE TABLE test_case_weekday (
    weekday_index INT NOT NULL
);

然后,让我们插入几个数据:

INSERT INTO test_case_weekday
VALUES (0), (1), (2), (3), (4), (5), (6);

然后,让我们看一下表中的数据:

SELECT * FROM test_case_weekday;

输出:

+---------------+
| weekday_index |
+---------------+
|             0 |
|             1 |
|             2 |
|             3 |
|             4 |
|             5 |
|             6 |
+---------------+

如果我们想在查询中同时查出工作日索引对应的工作日的名称,可以使用 CASE 语句。如下:

SELECT
    weekday_index AS `Weekday Index`,
    CASE weekday_index
        WHEN 0 THEN 'Monday'
        WHEN 1 THEN 'Tuesday'
        WHEN 2 THEN 'Wednesday'
        WHEN 3 THEN 'Thursday'
        WHEN 4 THEN 'Friday'
        WHEN 5 THEN 'Saturday'
        WHEN 6 THEN 'Sunday'
        ELSE 'Error'
    END AS `Weekday Name`
FROM
    test_case_weekday;

输出:

+---------------+--------------+
| Weekday Index | Weekday Name |
+---------------+--------------+
|             0 | Monday       |
|             1 | Tuesday      |
|             2 | Wednesday    |
|             3 | Thursday     |
|             4 | Friday       |
|             5 | Saturday     |
|             6 | Sunday       |
+---------------+--------------+

这里我们也可以使用第二种语法来改写上面的语句:

SELECT
    weekday_index AS `Weekday Index`,
    CASE
        WHEN weekday_index = 0 THEN 'Monday'
        WHEN weekday_index = 1 THEN 'Tuesday'
        WHEN weekday_index = 2 THEN 'Wednesday'
        WHEN weekday_index = 3 THEN 'Thursday'
        WHEN weekday_index = 4 THEN 'Friday'
        WHEN weekday_index = 5 THEN 'Saturday'
        WHEN weekday_index = 6 THEN 'Sunday'
        ELSE 'Error'
    END AS `Weekday Name`
FROM
    test_case_weekday;

输出结果与上面完全相同。

处理 NULL 值时的替代方案

MariaDB CASE 表达式是比较复杂的,书写起来也有难度。在处理 NULL 值时,您可以使用 COALESCE()NULLIF() 之类的函数代替,他们更加简洁。

MariaDB COALESCE() 函数返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL

MariaDB NULLIF() 函数,如果两个参数相同返回 NULL,否则返回第一个参数。

结论

在 MariaDB 中,CASE 是一个内置的表达式,它类似于 if-elseif-else,用于流程控制中的多分支情况。