表A 中有列 code 内容为:3301-1
3301-22
3301-3
3301-2
3301-13
3301-11
3301-12如何按下面的顺序排序
3301-1
3301-2
3301-3
3301-11
3301-12
3301-13
3301-22我用的版本 oracle 9i

解决方案 »

  1.   

    select * from 表A order by substr(code,6);
      

  2.   

    上面有误,要转换一下
    select * from 表A order by to_number(substr(code,6));
      

  3.   


    with tmp as
    (
    select '3301-1' code from dual
    union
    select '3301-22' code from dual
    union
    select '3301-3' code from dual
    union
    select '3301-2' code from dual
    union
    select '3301-13' code from dual
    union
    select '3301-11' code from dual
    union
    select '3302-12' code from dual
    )
    select * from tmp order by to_number(substr(code,1,4)), to_number(substr(code,6));
      

  4.   

    问题没有描述完全表A 中有列 code ,year内容为:code      year
    3301-1    2010
    3301-22   2010
    3301-3    2010
    3301-2    2010
    3301-13   2010
    3301-11   2010
    3301-12   2010
    查询2010年的记录 如何按下面的顺序排序
    3301-1
    3301-2
    3301-3
    3301-11
    3301-12
    3301-13
    3301-22我用的版本 oracle 9i??
    先谢谢上面各位!!
      

  5.   


    with tmp as
    (
    select '3301-1' code, '2010' year from dual
    union
    select '3301-22' code, '2010' year from dual
    union
    select '3301-3' code, '2010' year from dual
    union
    select '3301-2' code, '2010' year from dual
    union
    select '3301-13' code, '2010' year from dual
    union
    select '3301-11' code, '2010' year from dual
    union
    select '3302-12' code, '2010' year from dual
    union
    select '3302-2' code, '2010' year from dual
    union
    select '3304-12' code, '2009' year from dual
    union
    select '3304-2' code, '2009' year from dual
    )
    select * from tmp 
    where year = '2010'
    order by to_number(substr(code,1,instr(code,'-')-1)), to_number(substr(code,instr(code,'-')+1));
      

  6.   


    如果记录很多,用union不合适吧!
    还有to_number函数可以用于where子句中吗??
      

  7.   

    完美答案:实验认证:select to_number(substr(code,6)) aa  from A order by aa;
      

  8.   

    只要记录不重复,union和union all没有区别。
    to_number可以用于where子句中
      

  9.   


    CREATE TABLE a(code varchar(10));INSERT INTO a(code) values('3301-1');
    INSERT INTO a(code) values('3301-22');
    INSERT INTO a(code) values('3301-3');
    INSERT INTO a(code) values('3301-2');
    INSERT INTO a(code) values('3301-13');
    INSERT INTO a(code) values('3301-13');
    INSERT INTO a(code) values('3301-11');
    INSERT INTO a(code) values('3301-12');
    SELECT code
    FROM a
    ORDER BY substr(code,1,length('-')-1) || lpad( substr(code,length('-')+1,length(code)),2,'0');
      

  10.   

    select code  from Aorder by substr(code,6);   上个只是把截取的排序了,这个才对,不过一看,和二楼一样了。
      

  11.   


    CREATE TABLE a(code varchar(10));INSERT INTO a(code) values('3301-1');
    INSERT INTO a(code) values('3301-22');
    INSERT INTO a(code) values('3301-3');
    INSERT INTO a(code) values('3301-2');
    INSERT INTO a(code) values('3301-13');
    INSERT INTO a(code) values('3301-13');
    INSERT INTO a(code) values('3301-11');
    INSERT INTO a(code) values('3301-12');-- 方法一:
    SELECT code
    FROM a
    ORDER BY substr(code,1,length('-')-1) || lpad( substr(code,length('-')+1,length(code)),2,'0');-- 方法二:
    SELECT code
    FROM a
    ORDER BY substr(code,1,length('-')-1), substr(code,length('-')+1,length(code));