在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择:

  1. 按中文拼音进行排序:SCHINESE_PINYIN_M
  2. 按中文部首进行排序:SCHINESE_RADICAL_M
  3. 按中文笔画进行排序:SCHINESE_STROKE_M

而oracle 9i是对中文的排序是默认按拼音排序(并不是指NLS_SORT = SCHINESE_PINYIN_M,而是说SQL中不指定NLS_SORT时对中文列排序时默认按拼音)的,跟之前的2进制编码排序有所不同.具体用法如下:

  1. 直接写在sql中,例如:

    1. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M');
    2. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M');
    3. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M');
  2. 配置在初始化参数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进制排序,而是使用上面介绍的3种针对中文的特殊排序,则oracle无法使用索引,会进行全表扫描.这点一定要注意,多用plsql工具比较一下执行效率.解决方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));

以下是oracle文档中的原文:

Note:
Setting NLS_SORT to anything other than BINARY causes a sort to use a full table scan, regardless of the path chosen by the optimizer. BINARY is the exception because indexes are built according to a binary order of keys. Thus the optimizer can use an index to satisfy the ORDER BY clause when NLS_SORT is set to BINARY. If NLS_SORT is set to any linguistic sort, the optimizer must include a full table scan and a full sort in the execution plan.

Oracle中针对中文进行排序相关推荐

  1. 按照拼音对数组中的中文字符串排序的算法

    按照拼音对数组中的中文字符串排序的算法,不是很难,这里直接放上代码,Demo去最下面找: 注:里面用到一个叫George的牛人写的中文转拼音首字母的函数pinyinFirstLetter,因为内容实在 ...

  2. oracle+sql+按中文拼音排序,Oracle 中文字段进行排序的sql语句

    Oracle 中文字段进行排序的sql语句 1)按笔画排序 select * from Table order by nlssort(columnName,'NLS_SORT=SCHINESE_STR ...

  3. Oracle中针对层次数据所设计的专用SQL查询语句

    假设有组织数据表orgstdstruct,其中包含UNITID,PUNITID,UNITNAME等字段,其中PUNITID是本表UNITID字段的外键,那么在ORACLE中可以通过以下语句直接查询出具 ...

  4. 如何解决oracle中文乱码问题,oracle中解决中文乱码问题

    中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 查到结果是: USERENV('LANGUAGE') --------------- ...

  5. python中对中文列表排序,超简单!!!

    文章目录 前言 一.问题 二.解决 1.思路 2.实现 前言 今天要对一个元素内容是中文的列表进行排序输出,结果发现排序结果并不是与预期不同,经过一番搜索后发现,用第三方库pypinyin对中文进行转 ...

  6. oracle中的中文排序,Oracle中的中文排序方式

    测试中文排序的版本: SQL> select * from v$version; BANNER ------------------------------------------------- ...

  7. Oracle中根据中文获取拼音首字母

    前言 在软件中方便用户查找信息时,都会用到输拼音首字母的简写快速过滤,所以一般我们在Oracle的表中会加上一列助记符列,今天我们就看看将中文怎么转换为拼音首字母. 实现方式 通过oracle的NLS ...

  8. 小数点进位 oracle,使用多个小数点(。)对Oracle中的记录进行排序

    没有正则表达式和函数的解决方案(假设t是包含源数据的表): select * from t order by ( select sum( to_number(substr( sections, dec ...

  9. oracle中查询中文字段查询不出的问题

    今天在学习项目的过程中,遇到了一个问题,使用plsql对数据库进行查询时,查询条件为中文的怎么都查询不出来.就比如说是select * from student t where   t.xingm=' ...

  10. oracle中按数字大小排序函数,oracle中分组排序函数用法

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如: 1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的 ...

最新文章

  1. 基于机器学习的入侵检测系统
  2. 2021年春季学期-信号与系统-第十四次作业参考答案-第四小题参考答案
  3. (转载)彻底理解浏览器的缓存机制
  4. opengl win32 nehe
  5. java memcached 存储对象_memcached—向memcached中保存Java实体需注意的问题
  6. 编译程序提示配置PKG_CONFIG_PATH
  7. js清除添加的下拉框html,Html下拉框的定义以及JS、Jquary取值、添加和移除
  8. BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
  9. 总结JavaScript中的继承
  10. Python中的signal模块和Ctrl+C操作
  11. CentOS 7下安装QT5.8
  12. (笔记)《游戏脚本高级编程》——第1章 脚本编程概论
  13. mac安装jad反编译工具
  14. 适合公司年会的4个热门互动小游戏
  15. 云服务器/树莓派搭建我的世界Minecraft多人游戏服务器
  16. CSS3解决连续英文字符或数字不能自动换行的问题
  17. Codeforces 869E. The Untended Antiquity (二维Fenwick,Hash)
  18. 07.保护模式下字符显示
  19. Apche Kylin启动报错:UnknownHostException: node1:2181: invalid IPv6 address
  20. 我的见解之hibernate(八)

热门文章

  1. MyBatis学习_2_MyBatis的关联映射
  2. Python文本处理(3)——文本表示之 one-hot 词向量(1)——纯小白都能懂!
  3. 华为推送服务回执证书即将到期,尽快更新
  4. 用印审批移动办公用户手册
  5. 游戏建模常用软件以及模型制作流程
  6. 被忽视的大型互联网企业安全隐患:第三方开源WiKi程序
  7. unity导入导出excel的功能
  8. 创新工场 蔡学镛SINA微博中向我们提及的书籍、文章统计 (二)
  9. ArcCatalog导出数据
  10. 特殊字符图案大全c语言,特殊符号大全