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

So sánh số lưu dưới dạng VARCHAR trong MySQL

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.