解决方案 »

  1.   

    观察一下这个select * from (
      select 'g5(10).ttf' as img
      union select 'g5(9).ttf'
      ) T
      order by substring(img, 4, 10)+0
      

  2.   

    应该是 order by 取子串  这样吧
      

  3.   

    order by  left(file_name,1) asc,LENGTH(SUBSTRING_INDEX(file_name,'.',1)) asc,file_name asc通过这样实现了  先按照首字母排序 再按照点前边的字符串宽度排序  再按照名称排序
      

  4.   


    字符串與數字比較的區別。如果
    C20(1).tif
    C3(10).tif會C20(1).tif 排先吧。
      

  5.   


    字符串與數字比較的區別。如果
    C20(1).tif
    C3(10).tif會C20(1).tif 排先吧。这是个问题有办法解决吗
      

  6.   

    如果前导的字母是定长的那么可以(测试例)select *, substring(SUBSTRING_INDEX(file_name, '(', 1), 2, length(file_name)) as f1, SUBSTRING_INDEX(file_name, '(', -1) as f2 from (
      select 'g5(10).ttf' as file_name
      union select 'F15(9).ttf'
      union select 'g5(9).ttf'
      ) T
      order by substring(SUBSTRING_INDEX(file_name, '(', 1), 2, length(file_name))+0,SUBSTRING_INDEX(file_name, '(', -1)+0 file_name f1 f2 
    g5(9).ttf 5 9).ttf 
    g5(10).ttf 5 10).ttf 
    F15(9).ttf 15 9).ttf