การแปลงค่า Boolean-like (1/0) เป็น Y/N ด้วย IF()
ฟังก์ชัน IF(condition, true_value, false_value) ใน MySQL ใช้สำหรับเงื่อนไขแบบ binary (2 ทางเลือก) สั้นกว่า CASE
ไวยากรณ์
SELECT IF(yourColumn = 1, 'Y', 'N') AS flag FROM yourTable;
หรือใช้ความจริงของตัวเลขโดยตรง (0 = FALSE, non-zero = TRUE):
SELECT IF(yourColumn, 'Y', yourColumn) AS flag FROM yourTable;
ตัวอย่างการใช้งาน
สร้างตาราง (เหมือนบทความก่อนหน้า):
CREATE TABLE changeValuefrom1toY (
Id INT NOT NULL AUTO_INCREMENT,
isValidAddress TINYINT(1),
PRIMARY KEY(Id)
);
INSERT INTO changeValuefrom1toY(isValidAddress) VALUES(1), (0), (1), (1), (1), (0), (1);
ใช้ IF():
SELECT IF(isValidAddress, 'Y', isValidAddress) AS Answer FROM changeValuefrom1toY;
ผลลัพธ์:
+--------+
| Answer |
+--------+
| Y |
| 0 |
| Y |
| Y |
| Y |
| 0 |
| Y |
+--------+
การจัดการ NULL
หากคอลัมน์มี NULL:
-- NULL ถือเป็น FALSE ใน IF()
SELECT IF(isValidAddress, 'Y', 'N') FROM table; -- NULL -> 'N'
-- แยก NULL ออกมา
SELECT CASE
WHEN isValidAddress = 1 THEN 'Y'
WHEN isValidAddress = 0 THEN 'N'
ELSE 'Unknown'
END FROM table;
เปรียบเทียบ IF() vs CASE
| คุณสมบัติ | IF(cond, true, false) | CASE WHEN ... END |
|---|---|---|
| มาตรฐาน SQL | ไม่ใช่ (MySQL only) | ใช่ (ANSI) |
| จำนวนเงื่อนไข | 2 ทางเลือก (true/false) | ไม่จำกัด |
| NULL handling | NULL = FALSE | ควบคุมได้ชัดเจน |
| ความยาวโค้ด | สั้น | ยาวกว่า |
| Nested | ได้แต่อ่านยาก | อ่านง่ายกว่า |
คำแนะนำ
- ใช้
IF()สำหรับ logic แบบ binary เรียบง่าย (1/0, true/false, yes/no) - ใช้
CASEสำหรับ logic ซับซ้อน, หลายเงื่อนไข, หรือต้องจัดการ NULL แยกต่างหาก - ใน Application code แนะนำทำการ mapping ที่ Application layer แทน (แยก concerns)