oracle 中查询结果的排序

1,使用order by

汉字的编码规则,有提到如下一句:    “一级汉字,是最常用的汉字,按汉语拼音字母顺序排列,共3755个;二级汉字,属于次常用汉字,按偏旁部首的笔划顺序排列,共3008个,order采用的是利用ASCII编码来排序的明所以数字在字母前面,字母在汉字前面,一般汉字都是一级汉字,是按拼音来的,所以误以为order是按拼音的,实际不是,可以对order进行指定。

按照拼音排序

ORDER BY nlssort(NAME, ‘NLS_SORT=SCHINESE_PINYIN_M‘)

按照部首顺序

ORDER BY nlssort(NAME, ‘NLS_SORT=SCHINESE_RADICAL_M‘)

按照笔画进行排序

ORDER BY nlssort(NAME, ‘NLS_SORT=SCHINESE_STROKE_M‘)

一般默认为是升序排序,可以对排序进行指定

SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;

DESC为降序,ASC为升序

如果要对多个列进行排序则

SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;

先按depptno排序,如果deptno相等,则按hiredate

也可以对组合结果排序,如对某两行的乘积排序

    1. SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp
    2. ORDER BY total;

2在项目进行过程中,遇到了一个生僻字,在组成json数据 时候,采用了冒泡排序,将json数组里面的某一字段进行排序,将这个生僻字用其他常用字的形式进行排序,得到结果具体代码为

    public JSONArray bubbleSort(JSONArray args) throws JSONException ,UnsupportedEncodingException {//冒泡排序算法
        for(int i=0;i<args.length()-1;i++){
               for(int j=i+1;j<args.length();j++){
                   JSONObject strResult1 = new JSONObject();
                   strResult1 =  args.getJSONObject(i);
                   String s1= strResult1.getString("streetname");
                   JSONObject strResult2 = new JSONObject();
                   strResult2 =  args.getJSONObject(j);
                   String s2= strResult2.getString("streetname");
                   if(s1.equals("垡头"))
                       s1="发头";
                   if(s2.equals("垡头"))
                       s2="发头";
                   String s3,s4;
                    byte[] b1 = null;
                    byte[] b2 = null;
                    StringBuffer sb1 = new StringBuffer();
                    StringBuffer sb2 = new StringBuffer();
                    b1 = s1.getBytes("gb2312");
                    b2 = s2.getBytes("gb2312");
                    for (int k = 0; k < b1.length; k++) {
                        sb1.append(Integer.toHexString(b1[k] & 0xFF));
                    }
                    for (int k = 0; k < b2.length; k++) {
                        sb2.append(Integer.toHexString(b2[k] & 0xFF));
                    }
                    s3= sb1.toString();
                    s4= sb2.toString();
                   if (s3.compareTo(s4)>0){   

                       args.put(i, strResult2);
                       args.put(j, strResult1);

                       }
            }
       }
       return args;
}
    
时间: 2024-12-21 03:33:14

oracle 中查询结果的排序的相关文章

Oracle中针对中文进行排序[Z]

在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择: 按中文拼音进行排序:SCHINESE_PINYIN_M 按中文部首进行排序:SCHINESE_RADICAL_M 按中文笔画进行排序:SCHINESE_STROKE_M 而oracle 9i是对中文的排序是默认按拼音排序(并不是指NLS_SORT = SCHINESE_PINYIN_M,而是说SQL中不指定NLS_SORT时对中文列排序时默认按拼音)的,跟之前的2进制编码排序有所不同.具体用法如

Oracle中查询一个表中字段(列)个数

如果一个表中有很多的字段,而我们想要知道这个表中的字段个数,如果使用如下方式一个一个数,则显得很麻烦 Oracle中可以使用如下sql来查询字段(列)个数 select count(*) from user_tab_columns where table_name=upper('表名') 或者 select max(column_id) from user_tab_columns where table_name=upper('表名') 作者:itmyhome 链接:http://blog.cs

Oracle中查询时候使index索引失效的限制条件

昨天,由于最近的项目需要进入到测试人员进行测试的阶段.因此,自己搭建好了测试环境---进行了测试.但是,奇怪的事情就发生了.以前在我自己本地开发的环境的时候却没有碰到这个问题. 由于在测试环境执行的查询的时候,不管怎么做,总是会查询失败,并且前台抛出"无法连接,请联系系统管理员"异常,开始,我就不断的跟踪这个异常, 第一:在前台找了好久  也设置了相应的response====timeout时间参数为60s.再去执行,还是查询失败.因此,否定了这个原因. 第二:我使用Debug模式去调

oracle中查询所有外键引用到某张表的记录

其实查找这篇文章  我主要用的sql 是这句  select * from user_cons_columns t where t.constraint_name like 'FK_CTS_CONT_REINS__CRR'; 起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中删除该警员,就会引起数据不一致,前台报错.所以,这个时候我就想查找数据库中

如何在Oracle中 查询一个表被其他数据库对象引用[z]

这两天老大让我再oracle中把要替换的表被其他对象引用之处找出来,整理一份表,接到这个任务,我是一脸懵逼,怎么找?大海捞针么?问同事.查资料,自己研究,最后整理一下仅供大家参考,同时以备将来回顾.本篇只涉及表被其他数据库对象引用,不涉及外键,想寻找外键的,自己查看下面附有的链接. 首先有下列几种方式: 1.plsql工具 : 点击工具,找到 查找数据库对象 最后进入到查找页面 最后根据页面把要查找的 表对象或者关键词填入 文本查找   里,再在对象条件里 选择自己要筛选的条件即可筛选.但是此方

Oracle中查询当前时间、时间格式化方法

Oracle中如何获取系统当前时间 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;  ORACLE里获取一个时间的年.季.月.周.日的函数 select  to_char(sysdate, 'yyyy' )  from dual; --年  select  to_char(sysdate, 'MM' )  from dual; --月 select  to_char(sysdate, 'dd' )  from dual; --

Oracle中查询前10条记录

在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10     ----说明:rownum只能用于<或<=运算,如果要用>运算符就要用到嵌套查询. 下面是关于rownum的介绍 ================================ Rownum和row_number().over()的使用 ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分

Oracle中查询关键字select--from--where--group by--having--order by执行顺序

select--from--where--group by--having--order by 这6个查询关键字的执行顺序: 1.from组装来自不同数据源的数据:2.where基于指定的条件对记录行进行筛选:3.group by子句将数据划分为多个分组:4.使用聚集函数进行计算:5.使用having子句筛选分组:6.计算所有的表达式:7.select 集合输出:8.使用order by对结果集进行排序. 以下例子基于Oracle自带表空间hr 例子1:having和select的执行说明 情景

[转]oracle中查询指定行数的记录

oracle使用虚列rownum可以查询到指定数字之间的记录数. 第一行的rownum=1 比如我们想查询前五条记录,可以使用 select * from  表名 where rownum<5. 但是我们如果使用rownum>5时,就会出错,这时候就得换种方法了. select  列名 from          (select rownum r,列名  from emp)                 where r>5 比如我们想查询emp表中薪水排名6-9的员工,则 select