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

Sắp xếp chuỗi số (string number) trong MySQL


Khi cột lưu số dưới dạng VARCHAR, sắp xếp mặc định là theo thứ tự chữ (lexicographic): 1, 10, 100, 2, 20.... Cần ép kiểu sang số để sắp xếp đúng.

Cú pháp dùng CAST()

SELECT * FROM table_name 
ORDER BY CAST(string_column AS DECIMAL(precision, scale)) DESC;

Ví dụ minh họa

mysql> CREATE TABLE SortingStringDemo (Amount VARCHAR(10));
Query OK, 0 rows affected (0.91 sec)

mysql> INSERT INTO SortingStringDemo VALUES 
('12.34'), ('124.50'), ('9.59'), ('150.68'), ('600.54');
Query OK, 5 rows affected

Sắp xếp giảm dần (DESC):

mysql> SELECT * FROM SortingStringDemo 
ORDER BY CAST(Amount AS DECIMAL(6,2)) DESC;

Kết quả:

+--------+
| Amount |
+--------+
| 600.54 |
| 150.68 |
| 124.50 |
| 12.34  |
| 9.59   |
+--------+

Các cách ép kiểu khác

  • CAST(Amount AS UNSIGNED) - cho số nguyên không dấu
  • CAST(Amount AS SIGNED) - cho số nguyên có dấu
  • Amount + 0 - ép kiểu ngầm (MySQL tự chuyển sang số)
  • CAST(Amount AS DECIMAL(10,2)) - chính xác cho tiền tệ

Ví dụ với Amount + 0

SELECT * FROM SortingStringDemo 
ORDER BY (Amount + 0) DESC;

Lưu ý

  • Nếu dữ liệu có giá trị không phải số, CAST trả về 0 hoặc NULL tùy chế độ SQL.
  • Nên lưu trữ số ở kiểu số (INT, DECIMAL) thay vì VARCHAR nếu có thể.
  • DECIMAL(6,2) nghĩa là tổng 6 chữ số, 2 chữ số sau dấu phẩy.