有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)