Mysql数字排序

2015-08-17 veryyoung 更多博文 » 博客 » GitHub »

原文链接 http://veryyoung.me/blog/2015/08/17/mysql-rank-number.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


今天遇到一个需求,需要对计算过后的结果进行排序,结果出现了类似

1 10 11 12 13 14 15 16 17 18 19 2 3 4 5 6 7 8 9

这样的排序结果

很显然,mysql把它当字符串去排序了。

解决方案

  1. 使用CAST把字符串转为数字再排序

    SELECT * FROM  table_name ORDER BY CAST(field_name AS UNSIGNED) 
    
  2. 将字段*1或者+0可以将MySQL字符串字段按数值排序

    SELECT * FROM table_name ORDER BY field_name*1 desc
    

    或者

    SELECT * FROM table_name ORDER BY field_name+0 desc 
    
  3. 使用MySQL绝对值函数ABS

    SELECT * FROM table_name ORDER BY ABS(field_name) desc