2.1 คำสั่งกรณี
มีสองวิธีในการเขียนคำสั่งในCASE
SQL รายการแรกทำให้ดูเหมือนเปลี่ยนจากภาษา Java ในขณะที่รูปแบบที่สองเป็นเหมือนif-else
พหูพจน์
เริ่มจากตัวเลือกแรก - อะนาล็อกของสวิตช์ รูปแบบทั่วไปคือ:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
คล้ายกันมากจริง ๆswitch
ต่างกันแค่คำเล็กน้อย:
เอสคิวแอล | ชวา |
---|---|
กรณี x | สวิตช์ (x) { |
เมื่อค่า | มูลค่ากรณี: |
แล้วผลลัพธ์ | ส่งคืนผลลัพธ์ |
ผลลัพธ์อื่น | ค่าเริ่มต้น: ส่งคืนผลลัพธ์; |
จบ | } |
ลองแปลตัวอย่างจาก Java เป็น SQL:
ชวา | เอสคิวแอล |
---|---|
|
|
2.2 เวอร์ชันที่สองของคำสั่ง CASE
นอกจากนี้ยังมีรุ่นที่สองของโอเปอเรเตอร์CASE
ซึ่งเหมือนพหูพจน์มากกว่า ดังที่กล่าวไว้ข้าง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 | ชื่อ | วันกำหนดส่ง |
---|---|---|---|
1 | 1 | หมดอายุ! แก้ไขข้อบกพร่องในส่วนหน้า | 2022-06-01 |
2 | 2 | แก้ไขข้อบกพร่องในส่วนหลัง | 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