Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chuyển đổi giá trị 1 thành 'Y' trong MySQL SELECT dùng CASE

Để hiển thị giá trị 1 thành 'Y' (Yes) và giữ các giá trị khác (như 0) nguyên vẹn trong kết quả SELECT, bạn dùng câu lệnh CASE WHEN.

Cú pháp

SELECT cot1, cot2,
    CASE 
        WHEN ten_cot = 1 THEN 'Y'
        ELSE ten_cot
    END AS ten_moi
FROM ten_bang;

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE changeValuefrom1toY (
    Id INT NOT NULL AUTO_INCREMENT,
    isValidAddress TINYINT(1),
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu (1 và 0)

INSERT INTO changeValuefrom1toY(isValidAddress) VALUES
(1), (0), (1), (1), (1), (0), (1);

3. Xem dữ liệu gốc

SELECT * FROM changeValuefrom1toY;

Kết quả:

+----+----------------+
| Id | isValidAddress |
+----+----------------+
| 1  | 1              |
| 2  | 0              |
| 3  | 1              |
| 4  | 1              |
| 5  | 1              |
| 6  | 0              |
| 7  | 1              |
+----+----------------+

4. Truy vấn CASE: 1 → 'Y', khác → giữ nguyên

SELECT *,
    CASE 
        WHEN isValidAddress = 1 THEN 'Y'
        ELSE isValidAddress
    END AS Answer
FROM changeValuefrom1toY;

Kết quả:

+----+----------------+--------+
| Id | isValidAddress | Answer |
+----+----------------+--------+
| 1  | 1              | Y      |
| 2  | 0              | 0      |
| 3  | 1              | Y      |
| 4  | 1              | Y      |
| 5  | 1              | Y      |
| 6  | 0              | 0      |
| 7  | 1              | Y      |
+----+----------------+--------+

Các biến thể CASE

CASE đơn giản (Simple CASE) - so sánh bằng

SELECT CASE isValidAddress
    WHEN 1 THEN 'Y'
    WHEN 0 THEN 'N'
    ELSE '?'
END AS Answer FROM changeValuefrom1toY;

CASE tìm kiếm (Searched CASE) - điều kiện phức tạp

SELECT CASE 
    WHEN isValidAddress = 1 THEN 'Yes'
    WHEN isValidAddress = 0 THEN 'No'
    WHEN isValidAddress IS NULL THEN 'Unknown'
    ELSE 'Invalid'
END AS Status FROM bang;

Cách khác: Dùng IF() (ngắn hơn cho 2 nhánh)

SELECT IF(isValidAddress = 1, 'Y', isValidAddress) AS Answer
FROM changeValuefrom1toY;

Kết quả giống hệt CASE ở trên.

Cách khác: Dùng ELT() (cho mapping cố định)

-- ELT(index, val1, val2, ...) trả về val_index
-- isValidAddress = 1 → ELT(2, 'N', 'Y') = 'Y' (index 1-based)
SELECT ELT(isValidAddress + 1, 'N', 'Y') AS Answer FROM changeValuefrom1toY;

So sánh các cách

CáchƯu điểmNhược điểm
CASE WHENChuẩn ANSI, đọc dễ, nhiều nhánh, điều kiện phức tạpVerbose
IF()Ngắn gọn, 2 nhánhChỉ MySQL, lồng nhau khó đọc
ELT()Rất nhanh cho mapping index→valueChỉ dùng cho index liên tiếp 1,2,3...

Lưu ý kiểu dữ liệu

  • Kết quả CASE/IF/ELT là chuỗi (VARCHAR) do nhánh 'Y' là chuỗi
  • Nếu cần kiểu số: CASE WHEN cot=1 THEN 1 ELSE 0 END
  • COALESCE kiểu: COALESCE(NULLIF(cot, 1), cot) - phức tạp, không khuyên dùng