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

เปลี่ยนค่า 1 เป็น Y ใน MySQL SELECT ด้วย CASE

การแปลงค่า 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 เพื่อจับค่าที่ไม่คาดคิด