C/C++教程

Oracle对中文内容排序

本文主要是介绍Oracle对中文内容排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、需求说明

目前需要开发的Oracle数据库中有些表记录的内容是中文的,需要按照中文的方式进行排序。

二、分析思路
如果查询的结果字符集为ZHS16GBK/ZH16GBK,则使用order by默认是按照汉字的拼音顺序进行排序的;否则为其他(如UTF8等字符集),那么汉字的排序是按照BINARY(二进制)排序的,那么此时可以使用Oracle提供的NLS_SORT进行排序。

--查看当前数据库使用的字符集(语法)
SELECT userenv('language') FROM dual;
 
--查看整个数据库的NLS_SORT排序规则(语法)
select value from nls_database_parameters where parameter='NLS_SORT'; 
  
--查看当前会话的NLS_SORT排序规则(语法)
select value from nls_session_parameters where parameter='NLS_SORT';

三、解决方法

这是人员表中的原内容:

 

 3.1、按照拼音排序

--按照拼音排序(语法)
SELECT 字段名 FROM 表名 ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M');
 
--执行示例
SELECT "Name" FROM "PeopleInfo"  ORDER BY NLSSORT("Name",'NLS_SORT = SCHINESE_PINYIN_M');

执行示例结果如下: 

 

 3.2、按照笔画数排序

--按照笔画数排序(语法)
SELECT 字段名 FROM 表名 ORDER BY NLSSORT(排序字段名,'NLS_SORT=SCHINESE_STROKE_M');
 
--执行示例
SELECT "Name" FROM "PeopleInfo"  ORDER BY NLSSORT("Name",'NLS_SORT=SCHINESE_STROKE_M');

执行示例结果如下: 

 

 3.3、按照偏旁部首排序

--按照偏旁部首排序(语法)
SELECT 字段名 FROM 表名 ORDER BY NLSSORT(排序字段名,'NLS_SORT=SCHINESE_RADICAL_M');
 
--执行示例
SELECT "Name" FROM "PeopleInfo"  ORDER BY NLSSORT("Name",'NLS_SORT=SCHINESE_RADICAL_M');

  执行示例结果如下: 

 

 四、对汉字的一、二、三等数字排序

这是区域表中的原内容:

 

 实现对汉字一、二、三等排序的语法:

--实现对汉字一、二、三排序(语法)
SELECT 需排序的字段名 FROM 表名 order by TRANSLATE(需排序的字段名,'零一二三四五六七八九','0123456789');
 
--执行示例 
SELECT "Area" FROM "AreaInfo" order by TRANSLATE("Area",'零一二三四五六七八九','0123456789');

 执行示例结果如下:

 

 

这篇关于Oracle对中文内容排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!