2.1 CASE语句
在 SQL 中有两种写语句的方法CASE
。第一个条目让它看起来像是从 Java 语言切换过来的,而第二个格式更像是 plural if-else
。
让我们从第一个选项开始——开关的模拟。一般格式为:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
真的很像switch
,只是用词略有不同:
数据库 | 爪哇 |
---|---|
案例 x | 开关(x){ |
当值 | 案例价值: |
然后结果 | 返回结果; |
否则结果 | 默认:返回结果; |
结尾 | } |
让我们将一个例子从 Java 翻译成 SQL:
爪哇 | 数据库 |
---|---|
|
|
2.2 CASE语句的第二个版本
还有第二个版本的 operator CASE
,如上所述,它更像 plural if-else
。一般格式为:
CASE
WHEN condition 1 THEN result1
[WHEN condition 2 THEN result2] ...
[ELSE resultN]
END
这里只是简单的顺序检查条件,如果有一个为真,则返回指定的结果。如果所有条件都不为真,则在 中指定的值ELSE
。
让我们将一个例子从 Java 翻译成 SQL:
爪哇 | 数据库 |
---|---|
|
|
|
|
|
|
2.3 使用CASE语句解决问题
让我们写下一些有趣的查询。请记住,我们有一个任务 - 添加“过期!”这个词。以任务表中过去的任务名称。它可以很容易地用CASE
.
对于截止日期字段,它看起来像声明的第二个版本CASE
:
CASE
WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
ELSE name
END
使用运算符的完整查询示例CASE
:
SELECT
id,
emploee_id,
CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
deadline
FROM task
此查询的结果将是:
ID | emploee_id | 姓名 | 最后期限 |
---|---|---|---|
1个 | 1个 | 已到期!修复一个前端bug | 2022-06-01 |
2个 | 2个 | 修复后端的一个bug | 2022-06-15 |
3个 | 5个 | 买咖啡 | 2022-07-01 |
4个 | 5个 | 买咖啡 | 2022-08-01 |
5个 | 5个 | 买咖啡 | 2022-09-01 |
6个 | (无效的) | 打扫办公室 | (无效的) |
7 | 4个 | 享受生活 | (无效的) |
8个 | 6个 | 享受生活 | (无效的) |
GO TO FULL VERSION