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
语句用于多个逻辑判断分支的情况。下面的例子展示了如何通过工作日索引(0
到 6
)返回对应的工作日的名称。
首先,让我们创建一个表 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,用于流程控制中的多分支情况。