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

MySQL มี Ternary Operator แบบ C/C++ หรือไม่? ใช้ CASE WHEN แทน

MySQL ไม่มี Ternary Operator condition ? true_val : false_val แบบ C/C++ แต่ใช้ CASE WHEN ... THEN ... ELSE ... END แทนได้

เปรียบเทียบกับ C

// C Code
result = (X > 1 && (X-Y) < 0) ? X : (X-Y);

MySQL Equivalent

SELECT CASE WHEN tbl.X > 1 AND (tbl.X - tbl.Y) < 0 THEN 0 ELSE (tbl.X - tbl.Y) END AS Result
FROM TernaryOperationDemo tbl;

ตัวอย่างการใช้งาน

สร้างตาราง:

mysql> create table TernaryOperationDemo (X int, Y int);

เพิ่มข้อมูล:

mysql> insert into TernaryOperationDemo values(10,5),(5,15),(20,15),(15,25),(10,-11);

ข้อมูล:

+------+------+
| X    | Y    |
+------+------+
|   10 |    5 |
|    5 |   15 |
|   20 |   15 |
|   15 |   25 |
|   10 |  -11 |
+------+------+

ใช้ CASE WHEN:

mysql> SELECT CASE WHEN tbl.X > 1 AND (tbl.X - tbl.Y) < 0 THEN 0 ELSE (tbl.X - tbl.Y) END AS Result
    -> FROM TernaryOperationDemo tbl;

ผลลัพธ์:

+--------+
| Result |
+--------+
|      5 |
|      0 |
|      5 |
|      0 |
|     21 |
+--------+

รูปแบบ CASE WHEN ทั้งสองแบบ

-- Simple CASE
CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

-- Searched CASE (ยืดหยุ่นกว่า)
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

MySQL 8.0+ ยังไม่มี Ternary Operator ต้องใช้ CASE WHEN ตลอด