Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie sortiere ich eine MySQL-Spalte mit Daten in Bytes KB MB GB?

Sie sollten wirklich entweder alle Daten in eine gemeinsame Einheit umwandeln (z. B. Bytes) oder eine Spalte hinzufügen, die eine "Maßeinheit" enthält, und die Größenspalte selbst numerisch belassen.

Allerdings sollte das Folgende bei Daten funktionieren, die entweder mit GB/MB/KB oder B.

enden
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       |
+-------+------------+