通常我们用order by排序时,都是先排数字,后排字母.怎样让它先排字母,再排数字?如下字段有:      order by后的结果       希望的结果     
   3                 1                  A
   D                 2                  B
   1                 3                  C
   B                 A                  D
   C                 B                  1
   A                 C                  2
   2                 D                  3

解决方案 »

  1.   

    select *
    from tb
    order by case when col between 'A' and 'Z' then 0 else 1 end ,col
    ;
      

  2.   

    create table tb(a varchar(1),b varchar(1))
    insert into tb
    select '3','1'
    union all select 'D','2'
    union all select '1','3'
    union all select 'B','A'
    union all select 'C','B'
    union all select 'A','C'
    union all select '2','D'select * from tb 
    /*
    3 1
    D 2
    1 3
    B A
    C B
    A C
    2 D
    */select * 
    from tb 
    order by case when b between 'A' and 'Z' then 0 else 1 end ,b 
    /*
    B A
    C B
    A C
    2 D
    3 1
    D 2
    1 3
    */
      

  3.   


    --适用于字母大小写数字
    SELECT A
      FROM TT
     ORDER BY CASE
                WHEN SUBSTR(A, 1, 1) > '0' AND SUBSTR(A, 1, 1) < '9' THEN
                 'x' || A
                ELSE
                 A
              END;
      

  4.   


    SELECT ID FROM TTT ORDER BY (CASE WHEN SIGN(ASCII(ID)-65)>=0 THEN to_number(ASCII(ID)) ELSE to_number(ID) END )