Khi cột số được lưu sebagai VARCHAR, so sánh trực tiếp sẽ theo thứ tự chữ (lexicographic), dẫn đến kết quả sai (ví dụ: '100' < '90'). Cần ép kiểu sang số với CAST(... AS SIGNED).
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentScore VARCHAR(100)
-> );
Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable(StudentScore) VALUES('90'), ('100'), ('56'), ('98');
Query OK, 4 rows affected (0.13 sec)
Truy vấn so sánh đúng kiểu số
mysql> SELECT * FROM DemoTable WHERE CAST(StudentScore AS SIGNED) > 91;
Kết quả (chỉ 100 và 98 > 91):
+-----------+--------------+ | StudentId | StudentScore | +-----------+--------------+ | 2 | 100 | | 4 | 98 | +-----------+--------------+ 2 rows in set (0.00 sec)
Lưu ý: SIGNED cho số có dấu, UNSIGNED cho số không dấu. Có thể dùng CAST(StudentScore AS DECIMAL(10,2)) cho số thập phân.