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:

爪哇 數據庫
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

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:

爪哇 數據庫
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

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個 享受生活 (無效的)