MySQL không có kiểu dữ liệu BOOLEAN thực sự (BOOLEAN là alias của TINYINT(1)). Để đánh giá logic và trả về chuỗi 'true'/'false', sử dụng CASE WHEN.
Cú pháp
CASE WHEN điều_kiện THEN 'true' ELSE 'false' END AS tên_alias
Ví dụ minh họa
Tạo bảng demo:
mysql> CREATE TABLE BooleanEvaluationDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstValue INT,
-> SecondValue INT
-> );
Query OK, 0 rows affected (0.71 sec)
Chèn dữ liệu:
mysql> INSERT INTO BooleanEvaluationDemo(FirstValue, SecondValue) VALUES
-> (10, 5), (15, 20), (50, 40), (500, 1000);
Xem dữ liệu:
mysql> SELECT * FROM BooleanEvaluationDemo;
+----+------------+-------------+ | Id | FirstValue | SecondValue | +----+------------+-------------+ | 1 | 10 | 5 | | 2 | 15 | 20 | | 3 | 50 | 40 | | 4 | 500 | 1000 | +----+------------+-------------+
Đánh giá FirstValue > SecondValue:
mysql> SELECT FirstValue, SecondValue,
-> CASE WHEN FirstValue > SecondValue THEN 'true' ELSE 'false' END
-> AS FirstValuesGreaterThanSecond
-> FROM BooleanEvaluationDemo;
+------------+-------------+-------------------------------+ | FirstValue | SecondValue | FirstValuesGreaterThanSecond | +------------+-------------+-------------------------------+ | 10 | 5 | true | | 15 | 20 | false | | 50 | 40 | true | | 500 | 1000 | false | +------------+-------------+-------------------------------+
Mở rộng: Trả về 1/0 thay vì chuỗi
SELECT FirstValue, SecondValue,
(FirstValue > SecondValue) AS IsGreater
FROM BooleanEvaluationDemo;
Kết quả cột IsGreater sẽ là 1 (true) hoặc 0 (false) - đây là cách MySQL gốc xử lý boolean.