การแปลงค่า 1/0 เป็น Y/N ด้วย CASE Statement
ใช้ CASE WHEN ... THEN ... ELSE ... END ใน SELECT เพื่อแปลงค่าตัวเลขเป็นตัวอักษรที่อ่านง่าย
ไวยากรณ์
SELECT *,
CASE
WHEN yourColumn = 1 THEN 'Y'
ELSE 'N'
END AS readable_flag
FROM yourTable;
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE changeValuefrom1toY (
Id INT NOT NULL AUTO_INCREMENT,
isValidAddress TINYINT(1),
PRIMARY KEY(Id)
);
เพิ่มข้อมูล (1 = valid, 0 = invalid):
INSERT INTO changeValuefrom1toY(isValidAddress) VALUES(1), (0), (1), (1), (1), (0), (1);
ใช้ CASE แปลงค่า:
SELECT *,
CASE
WHEN isValidAddress = 1 THEN 'Y'
ELSE 'N'
END AS Answer
FROM changeValuefrom1toY;
ผลลัพธ์:
+----+----------------+--------+
| Id | isValidAddress | Answer |
+----+----------------+--------+
| 1 | 1 | Y |
| 2 | 0 | N |
| 3 | 1 | Y |
| 4 | 1 | Y |
| 5 | 1 | Y |
| 6 | 0 | N |
| 7 | 1 | Y |
+----+----------------+--------+
รูปแบบ CASE อื่นๆ
Simple CASE (เปรียบเทียบค่าเดียว)
SELECT CASE isValidAddress
WHEN 1 THEN 'Y'
WHEN 0 THEN 'N'
ELSE '?'
END AS Answer
FROM changeValuefrom1toY;
CASE กับ NULL
SELECT CASE
WHEN isValidAddress = 1 THEN 'Y'
WHEN isValidAddress = 0 THEN 'N'
WHEN isValidAddress IS NULL THEN 'Unknown'
ELSE 'Invalid'
END AS Answer
FROM changeValuefrom1toY;
วิธีอื่น: IF() และ ELT()
-- IF (สั้นกว่าสำหรับ 2 เงื่อนไข)
SELECT IF(isValidAddress = 1, 'Y', 'N') AS Answer FROM changeValuefrom1toY;
-- ELT (index-based, 1-based)
SELECT ELT(isValidAddress + 1, 'N', 'Y') AS Answer FROM changeValuefrom1toY;
-- isValidAddress=0 -> index 1 -> 'N'
-- isValidAddress=1 -> index 2 -> 'Y'
คำแนะนำ
- CASE - มาตรฐาน SQL, อ่านง่าย, รองรับหลายเงื่อนไข, จัดการ NULL ได้ชัดเจน
- IF() - MySQL only, สั้นกว่า, เหมาะ 2 ทางเลือก
- ELT() - ใช้ได้เฉพาะค่าเป็นตัวเลขต่อเนื่องจาก 1 (0,1,2...)
- พิจารณาเพิ่ม
ELSEเพื่อจับค่าที่ไม่คาดคิด