====== MySQL - 数値に変換してソート ====== backup_sizeがvarcharの為、普通にソートするとこのようになってしまいます。 mysql> select disk_id,backup_size from backups order by backup_size desc; +---------+-------------+ | disk_id | backup_size | +---------+-------------+ | 67 | 359728 | | 65 | 359656 | | 4570 | 240392 | | 3949 | 18931152 | | 3869 | 18379424 | | 3869 | 18086912 | | 3173 | 17994708 | | 3173 | 17870688 | | 3173 | 17870688 | | 4933 | 170412 | | 3829 | 14502832 | | 3781 | NULL | +---------+-------------+ 12 rows in set (0.01 sec) ===== こうすれば、数値に変換してソートできる。 ===== 0を足して、無理やり数値へ変換する。 mysql> select disk_id,backup_size from backups order by backup_size + 0 desc; +---------+-------------+ | disk_id | backup_size | +---------+-------------+ | 3949 | 18931152 | | 3869 | 18379424 | | 3869 | 18086912 | | 3173 | 17994708 | | 3173 | 17870688 | | 3173 | 17870688 | | 3829 | 14502832 | | 67 | 359728 | | 65 | 359656 | | 4570 | 240392 | | 4933 | 170412 | | 3781 | NULL | +---------+-------------+ 12 rows in set (0.00 sec) ===== castを利用する場合 ===== mysql> select disk_id,backup_size from backups order by cast( backup_size as SIGNED ) desc; +---------+-------------+ | disk_id | backup_size | +---------+-------------+ | 3949 | 18931152 | | 3869 | 18379424 | | 3869 | 18086912 | | 3173 | 17994708 | | 3173 | 17870688 | | 3173 | 17870688 | | 3829 | 14502832 | | 67 | 359728 | | 65 | 359656 | | 4570 | 240392 | | 4933 | 170412 | | 3781 | NULL | +---------+-------------+ 12 rows in set (0.00 sec)