Oracle

Oracle排序总结:

1.中文字符串排序:

Oracle 9i之前:按二进制字符串编码排序:

Oracle 9i:按默认拼音排序:

例如:

  1. SELECT * FROM 表名    ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M');
  2. SELECT * FROM 表名    ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M');
  3. SELECT * FROM 表名    ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M');
  4. SELECT * FROM TABLE order by instr('中,国',regexp_substr(排序字段名,'[中国]',1),1,1)  ;//先按中排序后按国排序

注:配置在初始化参数NLS_SORT中,这可以在数据库创建时指定,也可以通过alter session来修改.如果是前者,则在所有session中生效.例如:

  1. 使用select * from NLS_SESSION_PARAMETERS;语句可以看到NLS_SORT的值.
  2. 更改配置文件:alter system set nls_sort='SCHINESE_PINYIN_M' scope=spfile;
  3. 更改session:alter SESSION set NLS_SORT = SCHINESE_PINYIN_M;

 如按oracle官方文档的解释,oracle在对中文列建立索引时,是按照2进制编码进行排序所以如果NLS_SORT被设置为BINARY时,排序则可以利用索引.如果不是2进制排序,而是使用上面介绍的4种方法针对中文的特殊排序,则oracle无法使用索引,会进行全表扫描.这点一定要注意,多用plsql工具比较一下执行效率.解决方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));

2.数字排序:

利用oracle函数及正则表达式进行排序 order by to_number(regexp_substr(字段名,'[0-9]*[0-9]',1))。

 

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值