前几天时间曾经看见有人提出的中文排序问题,当时有高手用DECODE解决的。不过如果值太多,毕竟这样写比较麻烦。
这几天一直在找关于这方面的例子,其实以前也曾看见过,只是一直未曾用到,也就未加留心,下面把通用的解决方法贴出来,和大家共享之。
声明:以下所做测试,应该在oracle9i/10g以上。
oracle9i之前,中文是按照二进制编码进行排序的。
在oracle9i中新增了按照拼音、部首、笔画排序功能。可以分别通过设置NLS_SORT值来实现。
SCHINESE_RADICAL_M
按照部首(第一顺序)、笔划(第二顺序)排序。
SCHINESE_STROKE_M
按照笔划(第一顺序)、部首(第二顺序)排序。
SCHINESE_PINYIN_M
按照拼音排序,系统的默认排序方式为拼音排序。
测试如下:
--创建测试表
create table player
(id number(*,0),
name varchar2(32)
);
--插入测试数据
insert into PLAYER (ID, NAME)
values (1, '卡卡');
insert into PLAYER (ID, NAME)
values (2, '罗纳尔迪尼奥');
insert into PLAYER (ID, NAME)
values (3, '马尔递尼');
insert into PLAYER (ID, NAME)
values (4, '因扎吉');
insert into PLAYER (ID, NAME)
values (5, '舍甫琴柯');
insert into PLAYER (ID, NAME)
values (6, '西多夫');
insert into PLAYER (ID, NAME)
values (7, '帕托');
insert into PLAYER (ID, NAME)
values (8, '皮尔洛');
insert into PLAYER (ID, NAME)
values (9, '内斯塔');
commit;
--按照笔划排序
SQL> select * from player order by
2 nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
ID NAME
---------- --------------------------------
3 马尔递尼
9 内斯塔
1 卡卡
8 皮尔洛
4 因扎吉
6 西多夫
7 帕托
2 罗纳尔迪尼奥
5 舍甫琴柯
已选择9行。
--按照部首排序
SQL> select * from player order by
2 nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
ID NAME
---------- --------------------------------
9 内斯塔
1 卡卡
4 因扎吉
7 帕托
8 皮尔洛
2 罗纳尔迪尼奥
5 舍甫琴柯
6 西多夫
3 马尔递尼
已选择9行。
--按照拼音排序,此为系统的默认排序方式
SQL> select * from player order by
2 nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
ID NAME
---------- --------------------------------
1 卡卡
2 罗纳尔迪尼奥
3 马尔递尼
9 内斯塔
7 帕托
8 皮尔洛
5 舍甫琴柯
6 西多夫
4 因扎吉
已选择9行。
--默认排序,检验
SQL> select * from player order by name;
ID NAME
---------- --------------------------------
1 卡卡
2 罗纳尔迪尼奥
3 马尔递尼
9 内斯塔
7 帕托
8 皮尔洛
5 舍甫琴柯
6 西多夫
4 因扎吉
已选择9行
分享到:
相关推荐
oracle__汉字排序
对于需要存储中文的oracle数据库,我们在查询时如果需要按照汉字拼音对结果集进行排序时应该怎么做?看完本文档你就知道了。
Oracle 中对中文字段进行排序.txt
Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。 1、设置NLS_SORT参数值 SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 SCHINESE_STROKE_M ...
1oracle数据库汉字排序 2如何禁用表中的列,而不是删除它
EasyUI Datagrid 中文排序的问题 解决了WEB端和后台(Oracle、MySQL)中文排序问题
1)按笔画排序 select * from Table order by nlssort(columnName,’NLS_SORT=SCHINESE_STROKE_M’) 2)按部首排序 select * from Table order by nlssort(columnName,’NLS_SORT=SCHINESE_RADICAL_M’) 3)按拼音...
解决汉字首字母排序问题,全部拼音排序未解决
第二章 约束和排序 第三章 ORACLE SQL 单行函数 第四章 从多表中查询数据 第五章 用组函数合计数据 第六章 子查询 第七章 操纵数据 第八章 创建和管理表 第九章 内置约束 第十章 创建视图 第十一章 其他数据库对象 ...
某小区,需要按照小区、楼栋、单元号、房间号进行排序,但是按照地址描述排序时,因为字符串中包含数字,所以造成了如下的结果, 1号楼之后应该是2号楼,但是查询结果却是10号楼 。 尝试解决 使用正则表达式...
她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还包括 Expert Oracle Practices和Beginning Oracle SQL,博客主页是karenmorton....
中英文双语界面[/b]并能切换; 监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端;占用系统资 源极少;能运行于所有的主流平台包括 Windows、Linux、Unix 及 Mac OS;多线程多连接。所有...
多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle 客户端,能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac ...
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
Browser直接访问Oracle中的数据库对象,并能将其还原成原代码,所以不需要任何其他的代码管理工作。只要将Object Browser连接上数据库,就能将整个系统还原成原代码和文档资料。 ● 是一个轻便快速的...
13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部连接语法 13.2.3 用外部连接代替NOTIN 13.2.4 用NOTEXISTS代替NOTIN 13.3 自然连接和内部连接 13.4 UNION、INTERSECT和MINUS 13.4.1 IN子查询 13.4.2 ...
13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部连接语法 13.2.3 用外部连接代替NOTIN 13.2.4 用NOTEXISTS代替NOTIN 13.3 自然连接和内部连接 13.4 UNION、INTERSECT和MINUS 13.4.1 IN子查询 13.4.2 ...
Les02 过滤和排序数据.ppt Les03 单行函数.ppt Les04 多表查询.ppt Les05 分组函数.ppt Les06 子查询.ppt Les07 iSQLPlus.ppt Les08 处理数据.ppt Les09 创建和管理表.ppt Les10 约束.ppt Les11 视图.ppt ...