导航

数字字母混合排序问题

Posted on 2010-10-28 11:59  菜鸟都不容易  阅读(983)  评论(2编辑  收藏  举报
有a表如下字段
 id
 1
 a
 2
 b
 3
 c
 
排序后要得到
 id
 a
 b
 c
 1
 2
 3
 也就是说字符按照字符来排序,数字按照数字来排序

【解决方案】:
转换asc码,简洁方便 1是49  a是97 z就是122 只要让数字的码都大于字母就可以了,74是可以根据情况改的,要是有大写情况,也能处理。
对于oracle 10g 可以采用正则表达式
select Id from a order by (case when REGEXP_LIKE(trim(Id),'^[0-9]+$') then ascii(Id)+74 else ascii(Id) end)

【另一种排序】
表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以非常轻松的使用Decode完成要求了。

  select * from table_subject order by decode(subject_name, ’语文’, 1, ’数学’, 2, , ’外语’,3)