Khi cột lưu số dưới dạng chuỗi (VARCHAR), dùng CAST(... AS SIGNED) hoặc CAST(... AS UNSIGNED) để chuyển kiểu trước khi so sánh.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable(Value VARCHAR(100));
Query OK, 0 rows affected (1.02 sec)
mysql> INSERT INTO DemoTable VALUES
('900'), ('1090'), ('860'), ('12345'), ('908345');
Query OK, 5 rows affected
Tìm giá trị lớn nhất (sau khi ép kiểu số)
mysql> SELECT MAX(CAST(Value AS SIGNED)) FROM DemoTable;
Kết quả:
+----------------------------+ | MAX(CAST(Value AS SIGNED)) | +----------------------------+ | 908345 | +----------------------------+
Giải thích: Nếu không CAST, so sánh chuỗi sẽ theo thứ tự từ điển: '908345' < '900' (vì '9'='9', '0'<'0'...). Ép kiểu SIGNED/UNSIGNED đảm bảo so sánh theo giá trị số.
Lọc giá trị > 999:
SELECT * FROM DemoTable WHERE CAST(Value AS SIGNED) > 999;
Lưu ý: Nếu cột chứa giá trị không phải số (ví dụ 'abc'), CAST sẽ trả về 0 và không báo lỗi (chỉ warning).