SQL> DESC AA;
Name Type         Nullable Default Comments 
---- ------------ -------- ------- -------- 
ID   VARCHAR2(10) Y                         
NAME VARCHAR2(20) Y  SQL> SELECT * FROM AA;
 
ID         NAME
---------- --------------------
1          aa
2          bb
3          cc
4          dd
1a         ii
1b         jj
1c         kk
1e         mm
10a        xx
3b         ww
2c         vv
1d         oo希望得到如下结果:
 
ID         NAME
---------- --------------------
1          aa
2          bb
3          cc
4          dd
1a         ii
1b         jj
1c         kk
1d         oo
1e         mm
2c         vv
3b         ww
10a        xx请问SQL语句应该如何写?

解决方案 »

  1.   

    order by lpad( id , 10,' ')  desc
      

  2.   

    先根据长度,再根据字段值?
    order by length(id),id  就行了
      

  3.   

    with temp
    as
    (
    select '1' a,'aa' from dual
    union 
    select '2','bb' from dual
    union  
    select '3','cc' from dual
    union  
    select '4','dd' from dual
    union  
    select '1a','ii' from dual
    union  
    select '1b','jj' from dual
    union  
    select '1c','kk' from dual
    union  
    select '1e','mm' from dual
    union  
    select '10a','xx' from dual
    union  
    select '3b','ww' from dual
    union  all
    select '2c','vv' from dual
    union  all
    select '1d','oo' from dual)
    select * from temp order by length(a),a--result:1 aa
    2 bb
    3 cc
    4 dd
    1a ii
    1b jj
    1c kk
    1d oo
    1e mm
    2c vv
    3b ww
    10a xx
      

  4.   

    select * from aa order by lpad( id , 10,' ');