Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment trier la colonne mysql contenant des données en octets KB MB GB?

Vous devriez vraiment soit convertir toutes les données en une unité commune (disons des octets) ou ajouter une colonne qui contient une "unité de mesure" et garder la colonne de taille elle-même numérique.

Cela dit, ce qui suit devrait fonctionner sur les données qui se terminent par Go/Mo/Ko ou 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       |
+-------+------------+