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