Bạn thực sự nên chuyển đổi tất cả dữ liệu thành một đơn vị chung (ví dụ như byte) hoặc thêm một cột có chứa "đơn vị đo lường" và giữ cho cột kích thước là số.
Đã nói rằng, phần sau sẽ hoạt động trên dữ liệu kết thúc bằng GB / MB / KB hoặc B.
select size
from t
order
by case when size like '%GB' then power(1024, 3) * substr(size, 1, length(size) - 2)
when size like '%MB' then power(1024, 2) * substr(size, 1, length(size) - 2)
when size like '%KB' then power(1024, 1) * substr(size, 1, length(size) - 2)
when size like '%B' then substr(size, 1, length(size) - 1)
end desc;
+-------+------------+
| size | bytes |
+-------+------------+
| 1GB | 1073741824 |
| 10MB | 10485760 |
| 100KB | 102400 |
| 1000B | 1000 |
+-------+------------+