การใช้ CASE WHEN ใน SELECT เพื่อแปลงค่า
ใช้ CASE WHEN ... THEN ... ELSE ... END เพื่อสร้างคอลัมน์ใหม่ที่แปลงค่าจากคอลัมน์เดิม
รูปแบบคำสั่ง
SELECT yourColumnName1, yourColumnName2, ...,
CASE WHEN yourColumnName = value1 THEN 'result1'
WHEN yourColumnName = value2 THEN 'result2'
ELSE 'default_result'
END AS newColumnName
FROM yourTableName;
ตัวอย่าง: แปลงค่า 0/1 เป็น true/false
mysql> CREATE TABLE selectReturnDemo (
-> Id INT,
-> Name VARCHAR(100),
-> isGreaterthan18 TINYINT(1)
-> );
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO selectReturnDemo VALUES(1,'Carol',0);
mysql> INSERT INTO selectReturnDemo VALUES(2,'Bob',1);
mysql> INSERT INTO selectReturnDemo VALUES(3,'Mike',1);
mysql> INSERT INTO selectReturnDemo VALUES(4,'David',0);
mysql> INSERT INTO selectReturnDemo VALUES(5,'Adam',1);
ข้อมูลต้นฉบับ
mysql> SELECT * FROM selectReturnDemo;
+------+-------+-----------------+ | Id | Name | isGreaterthan18 | +------+-------+-----------------+ | 1 | Carol | 0 | | 2 | Bob | 1 | | 3 | Mike | 1 | | 4 | David | 0 | | 5 | Adam | 1 | +------+-------+-----------------+ 5 rows in set (0.00 sec)
คำสั่งแปลงค่าด้วย CASE
mysql> SELECT Id, Name,
-> CASE WHEN isGreaterthan18 = 1 THEN 'true'
-> ELSE 'false'
-> END AS AgeIsGreaterthan18
-> FROM selectReturnDemo;
+------+-------+--------------------+ | Id | Name | AgeIsGreaterthan18 | +------+-------+--------------------+ | 1 | Carol | false | | 2 | Bob | true | | 3 | Mike | true | | 4 | David | false | | 5 | Adam | true | +------+-------+--------------------+ 5 rows in set (0.00 sec)
รูปแบบ CASE แบบสั้น (Simple CASE):
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
การใช้งานขั้นสูง:
- หลายเงื่อนไข:
CASE WHEN age < 18 THEN 'child' WHEN age < 60 THEN 'adult' ELSE 'senior' END - ใน ORDER BY:
ORDER BY CASE status WHEN 'urgent' THEN 1 WHEN 'normal' THEN 2 ELSE 3 END - ใน WHERE:
WHERE CASE WHEN type='A' THEN 1 ELSE 0 END = 1