Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีเปลี่ยนค่าที่ SELECT ได้ใน MySQL ด้วย CASE WHEN

การใช้ 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