一个字段 例如 qwe001 sed002   erwer003  我怎么写一个sql语句然他们能按照  后面的数字大小排列起来 !

解决方案 »

  1.   

    升序:
    select * from tb_name order by right(字段,3) 降序:select * from tb_name order by right(字段,3) desc
      

  2.   

    如果是: 记录数出现如:xx0011,xx00101呢?
      

  3.   

    SELECT *,CAST(REVERSE(CAST(CONCAT('1',REVERSE(字段)) AS DECIMAL)) AS DECIMAL) As x FROM 表名 Order By x;
      

  4.   

    CONCAT加个1是为了防止末尾是0而出错。
      

  5.   

    结果怎么都是这样的?方法1: select * from tb order by  mid(title,3)+0 asc;
    方法2SELECT *,CAST(REVERSE(CAST(CONCAT('1',REVERSE(title)) AS DECIMAL)) AS DECIMAL) As x FROM tb Order By x;
    +----+--------+--------------+------+
    | id | title  | detail       | x    |
    +----+--------+--------------+------+
    |  1 | tit001 | aaaaaaaaaa   | 0.00 |
    |  2 | ttd002 | bbbbbbbbb    | 0.00 |
    |  3 | tdt003 | cccccccccccc | 0.00 |
    |  4 | adc012 | ddddddddddd  | 0.00 |
    |  5 | ttt010 | eeeeeeee     | 0.00 |
    +----+--------+--------------+------+
      

  6.   

    基于你的测试数据,应该改成这样了:
    select * from tb order by  mid(title,4)+0 asc;
      

  7.   

    上面的是隐性转换
    或直接显性转换:select * from tb order by cast(right(title,char_length(title)-3) as unsigned int) asc;
      

  8.   

    奇怪啊:
    mysql> SELECT id,title,CAST(REVERSE(CAST(CONCAT('1',REVERSE(title)) AS DECIMAL))
     AS DECIMAL) As x FROM mytable Order By x;
    +----+---------+-----+
    | id | title   | x   |
    +----+---------+-----+
    |  2 | tit001  |  11 |
    |  1 | ttd002  |  21 |
    |  3 | tdt003  |  31 |
    |  5 | ttt010  | 101 |
    |  6 | abcde11 | 111 |
    |  4 | adc012  | 121 |
    +----+---------+-----+
    6 rows in set (0.00 sec)不知道为什么我的“AS DECIMAL”能转出整数,你的却是小数?