资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

oracle数据库排序,(一开始以为简单,可是在web板块发帖没有解决),请大家指教,本人揭帖一向迅速!

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

表a:   字段名:busid;  
  数据如下:  
  1  
  2  
  3  
  4  
  5  
  11  
  12  
  13  
  22  
  31  
  k50  
  k53  
  如果我用select   *   from   a   order   by   id     结果如下:  
  1  
  11  
  12  
  13  
  2  
  22  
  31  
  k50  
  k53  
   
  如果我想实现查询结果如下:  
  1  
  2  
  3  
  4  
  5  
  11  
  12  
  13  
  22  
  31  
  k50  
  k53  
   
  请问查询语句该如何写?  
 

网友回答:

发表者:dinya2003

字段类型改用number,不要有非数字的内容.

发表者:lialin

带order   by的子句不能union比较郁闷,如果可以的话可以这样实现  
  select   busid   from   t_a   where   substr(busid,1,1)>9   or   substr(busid,1,1)<0   order   by   busid  
  select   busid   from   t_a   where   substr(busid,1,1)>=0   and   substr(busid,1,1)<=9   order   by   to_number(busid);  
   
   
 

发表者:lialin

你的字母如果有规则就可以解决,如:首为字母K,可以用如下方法解决:  
  select   decode(substr(no1,1,4),9999,k||substr(no1,5),no1)   as   no   from    
  (  
        select   decode(substr(no,1,1),k,9999||substr(no,2),no)   no1     from   testa   order   by   to_number(no1)  
  );  
   
   
  SQL>   select   no   from   testa;  
   
  NO  
  ---  
  111  
  101  
  102  
  103  
  104  
  105  
  107  
  108  
  109  
  110  
  11  
  12  
  13  
  14  
  15  
  16  
  1  
  2  
  3  
  4  
   
  NO  
  ---  
  k5  
  k7  
  k8  
  k9  
   
  24   rows   selected  
   
  SQL>    
  SQL>   select   decode(substr(no1,1,4),9999,k||substr(no1,5),no1)   as   no   from  
      2     (  
      3           select   decode(substr(no,1,1),k,9999||substr(no,2),no)   no1     from   testa   order   by   to_number(no1)   asc  
      4     );  
   
  NO  
  ---  
  1  
  2  
  3  
  4  
  11  
  12  
  13  
  14  
  15  
  16  
  101  
  102  
  103  
  104  
  105  
  107  
  108  
  109  
  110  
  111  
   
  NO  
  ---  
  k5  
  k7  
  k8  
  k9  
   
  24   rows   selected  
   
   
   
 

发表者:David1289

创建一个临时表,先插入数字型的行,并排好序,再插入带字母的行,也排好序,整个表用一个字段来索引所有数据行此,然后查询结果

发表者:liuyi8903

select   to_number(id)   idd   from   a  
    where   trim(translate(id,1234567890,             ))   is   null  
    order   by   idd

发表者:liuyi8903

如果只有字母k出现的话  
        select   to_number((replace(cusidt,k,)))   as   bb   from   tr01   order   by   bb

发表者:wdayang82

如果只有字母k出现的话  
        select   busid     from   a   order   by   to_number((replace(cusid,k,)))

发表者:nyfor

order   by   lpad(busid,10);  
   
  10   为你的数据栏位字段长度

发表者:qiangorqiang

你可以考虑把编码的长度统一定为3位,不足3位的编码前面补0。

发表者:yeqiufeng

我认为可以补充0   生成新的字段   用这个新的字段来排序  
   
   
  oracle是允许这样做的哦

发表者:yeqiufeng

select   emp2.*,lpad(备注,9,0)   sortid   from   emp2   order   by   sortid;  
   
  姓名                   备注                   编码                   职业                   SORTID  
  ------------   ------------   ------------   ------------   --------------  
  yeqiufeng         1                         3                         作家                   000000001  
  秋枫软件           2                         4                                                   000000002  
  秋枫苦雪           100                     1                         程序员               000000100  
  叶秋枫               200                     2                         厨师                   000000200  
  天玄软件           系统填写           5                         软件公司           0系统填写  
  ddy                     系统填写           6                         manager             0系统填写  
   
   
   
  这是我的测试结果   还行吧

发表者:KingSunSha

yeqiufeng(叶秋枫)   兄的建议最好。其实就是个右对齐再排序的问题。


 

 
热门推荐笔记本: IBM笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved