2009-10
2009-8
2009-10+2
10021-8我想排成這樣,“—”前面的按字符由小到大排序,“—”後面的按數字由小到大排列
10021-8
2009-8
2009-10
2009-10+2

解决方案 »

  1.   

    SELECT *
    FROM (SELECT substring( fld1, 1, (
    instr( fld1, '-' ) -1 )
    ) AS fld1, substring( fld1, (
    instr( fld1, '-' ) +1 )
    ) AS fld2
    FROM `table1`
    )tb1
    ORDER BY tb1.fld1 ASC , tb1.fld2 ASC 这个应该可以实现
      

  2.   

    SELECT substring( fld1, 1, (
    instr( fld1, '-' ) -1 )
    ) AS fld1, substring( fld1, (
    instr( fld1, '-' ) +1 )
    ) AS fld2
    FROM `table1`
    ORDER BY fld1 ASC , fld2 ASC外面那层select不要也可以
    这样的话,数据量大应该也没问题吧
      

  3.   

    这个,如果一次性的话,就sql吧,如果要经常性的话,建议添加一个字段保存那个数字,然后添加个索引。
      

  4.   

    SELECT substring( fld1, 1, ( 
    instr( fld1, '-' ) -1 ) 
    ) AS fld1, substring( fld1, ( 
    instr( fld1, '-' ) +1 ) 
    ) AS fld2 
    FROM `table1` 
    ORDER BY fld1 ASC , fld2 ASC 牛
      

  5.   

    select *
    from table1
    order by SUBSTRING_INDEX(col1,'-',1)+0,SUBSTRING_INDEX(col1,'-',-1)+0
      

  6.   


    select *
    from table1
    order by col1,SUBSTRING_INDEX(col1,'-',-1)