2.1 Tuyên bố TÌNH HUỐNG

Có hai cách để viết một câu lệnh trong SQL CASE. Mục nhập đầu tiên làm cho nó giống như chuyển đổi từ ngôn ngữ Java, trong khi định dạng thứ hai giống số nhiều hơn if-else.

Hãy bắt đầu với tùy chọn đầu tiên - một công tắc tương tự. Định dạng chung là:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

Thực sự rất giống với switch, chỉ có các từ hơi khác một chút:

SQL Java
trường hợp x công tắc (x) {
khi giá trị giá trị trường hợp:
sau đó kết quả trả về kết quả;
kết quả khác mặc định: trả về kết quả;
kết thúc }

Hãy dịch một ví dụ từ Java sang SQL:

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 Phiên bản thứ hai của câu lệnh CASE

Ngoài ra còn có một phiên bản thứ hai của toán tử CASE, như đã đề cập ở trên, giống như số nhiều hơn if-else. Định dạng chung là:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

Ở đây, các điều kiện chỉ đơn giản là được kiểm tra tuần tự, nếu bất kỳ điều kiện nào là đúng, thì kết quả đã chỉ định sẽ được trả về. Nếu không có điều kiện nào là đúng, thì giá trị được chỉ định trong ELSE.

Hãy dịch một ví dụ từ Java sang SQL:

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 Giải bài toán bằng câu lệnh CASE

Hãy viết ra một số truy vấn thú vị. Hãy nhớ rằng, chúng tôi đã có một nhiệm vụ - thêm từ "HẾT HẠN!" đến tên của các nhiệm vụ trước đây trong bảng nhiệm vụ . Nó có thể được thực hiện dễ dàng với CASE.

Đối với trường thời hạn , nó sẽ giống như phiên bản thứ hai của câu lệnh CASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

Một ví dụ về truy vấn hoàn chỉnh sử dụng toán tử CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

Kết quả của truy vấn này sẽ là:

nhận dạng nhân viên_id tên thời hạn
1 1 HẾT HẠN! Sửa lỗi ở frontend 2022-06-01
2 2 Sửa lỗi trên backend 2022-06-15
3 5 Mua cà phê 2022-07-01
4 5 Mua cà phê 2022-08-01
5 5 Mua cà phê 2022-09-01
6 (VÔ GIÁ TRỊ) Dọn dẹp văn phòng (VÔ GIÁ TRỊ)
7 4 Tận hưởng cuộc sống (VÔ GIÁ TRỊ)
số 8 6 Tận hưởng cuộc sống (VÔ GIÁ TRỊ)