在一个表格中,有一个数据字段。里面的内容类似这样

1
1-2
1-3
1-2-4
5
5-6
5-7
8应该如何写SQL才能出现这样的结果呢?
8
5
5-6
5-7
1
1-2
1-3
1-2-4使用select * from tab where 1 order by a desc
只能的出这样的排序
8
5-7
5-6
5
1-2-4
1-3
1-2
1

解决方案 »

  1.   

    select * from test order by field-0 desc,length(field),field asc;
      

  2.   

    SELECT * FROM ttg1 ORDER BY 
    MID(a,1,1) DESC,
    CAST(REPLACE(a,'-','') AS DECIMAL) ,LENGTH(a) desc
      

  3.   

    看上去逻辑有些混乱,楼主能说明一下排序的依据吗?select *
    from tab
    order by SUBSTRING_INDEX(a,'-',1) desc,length(a),SUBSTRING_INDEX(a,'-',2)
      

  4.   

    1楼兄弟,我太感谢你了
    我想把你供起来
    2楼的朋友你也很棒,谢谢你们帮我
    不过2楼的方法结果与order by a desc结果一样
    学到新东西了.谢谢啊
      

  5.   

    不过2楼的方法结果与order by a desc结果一样
    不是吧
    mysql> SELECT * FROM ttg1 ORDER BY
        -> MID(a,1,1) DESC,
        -> CAST(REPLACE(a,'-','') AS DECIMAL) ,LENGTH(a) desc;
    +-------+
    | a     |
    +-------+
    | 8     |
    | 5     |
    | 5-6   |
    | 5-7   |
    | 1     |
    | 1-2   |
    | 1-3   |
    | 1-2-4 |
    +-------+
    8 rows in set (0.00 sec)
      

  6.   

    还真实奇怪啊。我这里显示的是不对的.
    是按照降序排下来的.没有这种效果哦.不会是我的MYSQL版本太低的关系吧?
    我的MYSQL5.0的版本
      

  7.   

    我也是UTF8,你的-不是全角的吧?
      

  8.   

    就是根据第一个字符排序吧? 用LEFT。