oracle查询结果中有一个年级字段 grade varchar类型,如果直接order by grade 那么就会出现这样的结果
初二
初三
初一哪为仁兄给个思路   如何排序后结果可以成
初一
初二
初三

解决方案 »

  1.   

    这个是麻烦.
    如果只有这三个,可以用order by case ...end的方法.
    如何让ORDER BY按指定的顺序排序 
     
    表a里有个列叫Type,是商品类别,就3种情况:S,A,B,如下:
    id name type 
    1  一班 S 
    2  五班 A 
    3  三班 B 
    4  四班 B 
    5  二班 A 
    6  六班 S 
    现在我需要按照‘S’,‘A’,‘B’的顺序排序,如下:
    1 一班 S 
    6 六班 S 
    5 二班 A 
    2 五班 A 
    3 三班 B 
    4 四班 B SELECT *
    FROM tbl_test
    ORDER BY "@#$$%#$%@$@#$@$@#@$这里应该咋写?"
     
    select * from a where type='S' union all
    select * from a where type='A' union all
    select * from a where type='B'  
    select id , name ,type
    from a
    order by case type when 'S' then 1
    when 'A' then 2 when 'B' then 3 else 4 end (如果对ID排序,则加最后加,id)  
    select id , name ,type
    from (select *, case type when 'S' then 1 when 'A' then 2 else 3 end as seq from a) X
    order by seq  
    上诉对ID列没有进行排序,如果在上诉基础上对ID再进行排序。
    select id , name ,type(假设有列id ,name, type)
    from (select *, case type when 'S' then 1 when 'A' then 2 else 3 end as seq from a) X
    order by seq,id 
    1 一班 S 
    6 六班 S 
    2 五班 A 
    5 二班 A 
    3 三班 B 
    4 四班 B 
     
      

  2.   

    select * from test_a order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
      

  3.   

    order   by  nlssort(grade,'schinese_stroke_m')
    按笔画部首排序,试试看,oracle9才可以说明一下
      

  4.   

    schinese_radical_m 按部首、笔画排序
    schinese_pinyin_m 拼音排序,