`
cqh520llr
  • 浏览: 509722 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

oracle排序----oracle排序----

 
阅读更多

如果数据库字符集选用的是ZH16GBK,那么使用order by默认是按照汉字的“二进制编码”顺序进行排序的。有方法改变这个默认规则么?
答案是肯定的,Oracle针对简体中文提供三种排序方法,主要是围绕“拼音”、“部首”和“笔画数”展开的。
通过实验,给大家展示一下NLSSORT在改变简体汉字排序规则方面的魅力。

1.在Oracle的官方文档中关于排序有如下描述
“Linguistic Sorts”
http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/applocaledata.htm#sthref2000
其中表“Table A-15 Multilingual LInguistic Sorts”中我们关注一下有关中文排序的内容(前三条与简体中文排序有关,后两条与繁体中文排序有关):
1)SCHINESE_RADICAL_M
Simplified Chinese sort based on radical as primary order and number of strokes order as secondary order
注释:简体中文按照第一顺序是“部首”第二顺序是“笔画数”进行排序;

2)SCHINESE_STROKE_M
Simplified Chinese sort uses number of strokes as primary order and radical as secondary order
注释:简体中文按照第一顺序“笔画数”是第二顺序是“部首”进行排序;

3)SCHINESE_PINYIN_M
Simplified Chinese PinYin sorting order
注释:简体中文按照“拼音”进行排序;

4)TCHINESE_RADICAL_M
Traditional Chinese sort based on radical as primary order and number of strokes order as secondary order
注释:繁体中文按照第一顺序是“部首”第二顺序是“笔画数”进行排序;

5)TCHINESE_STROKE_M
Traditional Chinese sort uses number of strokes as primary order and radical as secondary order. It supports supplementary characters.
注释:繁体中文按照第一顺序“笔画数”是第二顺序是“部首”进行排序;

2.创建实验表T,并初始化六条记录
sec@secooler> create table t (x varchar2(10));
sec@secooler> insert into t values ('侯');
sec@secooler> insert into t values ('你');
sec@secooler> insert into t values ('做');
sec@secooler> insert into t values ('拉');
sec@secooler> insert into t values ('推');
sec@secooler> insert into t values ('拆');
sec@secooler> commit;
sec@secooler> select * from t;

X
------------------------------
侯
你
做
拉
推
拆

6 rows selected.

3.确认数据库版本和数据库字符集
sec@secooler> select * from v$version;

BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

sec@secooler> select userenv('language') from dual;

USERENV('LANGUAGE')
-----------------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

4.在此环境下,查看默认的汉字排序规则
sec@secooler> select * from t order by x;

X
------------------------------
拆
侯
拉
你
推
做

6 rows selected.

可见,此时的默认汉字排序规则是“拼音”。

5.使用nlssort强制按照拼音排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_PINYIN_M');

X
------------------------------
拆
侯
拉
你
推
做

6 rows selected.

6.使用nlssort强制按照“部首”(第一顺序)和“笔画数”(第二顺序)排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_RADICAL_M');

X
------------------------------
你
侯
做
拆
拉
推

6 rows selected.

单人旁的汉字在前,提手旁汉字在后;单人旁的三个汉字进一步又是按照笔画数多少进行的排序。

7.使用nlssort强制按照“笔画数”(第一顺序)和“部首”(第二顺序)排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_STROKE_M');

X
------------------------------
你
拆
拉
侯
做
推

6 rows selected.

可见,越往后的汉字的笔画数越多。
分享到:
评论

相关推荐

    Oracle PL-SQL 对应 hadoop hive 、 phoenix中常用的对应函

    - Oracle PL-SQL: `GROUP BY` 用于分组,`ORDER BY` 用于排序。 - Hadoop Hive 和 Phoenix: 均支持 `GROUP BY` 和 `ORDER BY`。 了解这些对应函数有助于在 Oracle PL-SQL 和 Hadoop Hive/Phoenix 之间迁移代码,...

    Oracle PL-SQL 对应 hadoop hive 、 phoenix中常用的对应函数

    - Oracle PL-SQL的`GROUP BY`和`ORDER BY`在Hive和Phoenix中同样存在,用于数据分组和排序。 8. **窗口函数**: - Oracle PL-SQL的窗口函数如`LEAD`、`LAG`、`RANK`在Hive中也有实现,但Phoenix不直接支持窗口...

    Oracle Press - Oracle Database 11g SQL

    8. **窗口函数**:探讨ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG等窗口函数的使用,用于行级排序和计算。 9. **游标**:解释游标的概念,如何声明、打开、读取和关闭游标,以及在PL/SQL中使用游标。 10. **高级SQL...

    oracle-sort-order-by.rar_oracle_sort - order

    在Oracle数据库中,排序(Sort)是SQL查询中不可或缺的一部分,`ORDER BY`子句用于决定查询结果的显示顺序。本篇文章将深入探讨Oracle数据库的日文排序机制,这对于在日本进行外包软件开发的工程师来说尤其重要。 ...

    Oracle --PlSql教程

    - 排序列的顺序,可以是升序(ASC)或降序(DESC)。 - **GROUP BY子句:** - 对结果集中的数据进行分组,通常与聚合函数一起使用。 - **HAVING子句:** - 类似于WHERE子句,但用于过滤GROUP BY的结果。 - **子句...

    Oracle驱-orai18n

    在Oracle数据库中,orai18n.jar文件包含了处理全球化需求的类和资源,如字符集转换、日期和时间格式、数字格式、货币格式以及排序规则等。这些功能对于一个跨国企业或有全球用户的数据库系统来说至关重要,因为它们...

    提高Oracle性能--如何走索引.docx

    标题中的“提高Oracle性能--如何走索引”指的是在Oracle数据库管理系统中,通过优化SQL查询语句和合理使用索引来提升系统性能的技术方法。描述中提到,在应用系统上线后,随着数据量的增长,SQL语句的优化对于系统...

    Oracle PL-SQL 对应 hadoop hive 、 p

    6. **分组和排序**: - Oracle 的 `GROUP BY` 和 `ORDER BY` 在 Hive 和 Phoenix 中同样存在。Hive 还支持 `DISTRIBUTE BY` 和 `CLUSTER BY` 来控制数据分区。 7. **数据类型转换**: - Oracle 的 `TO_CHAR` 和 `...

    Oracle--创建表空间+用户+授权

    临时表空间主要用于存储临时对象,例如排序操作时产生的临时数据。创建临时表空间的基本语法如下: ```sql CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE 'path_to_file' SIZE size AUTOEXTEND ON NEXT ...

    ORACLE技巧 - 不同记录集的横向合并

    - **`OVER`函数**:该函数主要用于窗口函数,可以计算出每个分区的数据相对于其他数据的关系,常用于排序、排名等场景。在本场景中,我们可能需要使用`OVER`函数来进行一些特定的计算,例如找出每个订单在不同时间点...

    Oracle--ROWNUM.rar_oracle

    Oracle数据库系统是世界上最广泛使用的数据库之一,尤其在企业级应用中占据重要地位。在Oracle中,`ROWNUM`是一个非常重要的概念,它涉及到数据检索、分页查询以及优化查询性能等多个方面。本篇将深入探讨`ROWNUM`的...

    韩顺平Oracle笔记-查询.

    - **ROWNUM结合排序:** ```sql SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) e WHERE ROWNUM ) WHERE rn > 5; ``` - 这些查询用于实现简单的分页功能,通过ROWNUM对查询结果进行...

    Oracle对排序操作的优化措施

    ### Oracle对排序操作的优化措施 #### 一、PGA与SGA的区别 在理解Oracle数据库对排序操作的优化措施之前,我们首先需要了解两个重要的内存结构:PGA(Program Global Area,程序全局区)与SGA(System Global Area...

    oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64

    - **结果集处理**:显示查询结果,支持排序、分组、条件过滤等操作。 - **PL/SQL块执行**:支持编写和执行存储过程、函数和触发器等PL/SQL代码。 - **动态SQL**:允许在运行时构建和执行SQL语句。 - **导出导入数据*...

    java零基础自学之 Oracle1-5课时

    SQL(结构化查询语言)是与数据库交互的语言,包括了简单的查询(如SELECT)、聚合函数(如COUNT、SUM)、分组(GROUP BY)、排序(ORDER BY)和连接(JOIN)等操作。在Oracle3-高级查询.ppt中,可能涵盖了子查询、...

    浅谈Oracle优化排序的操作

    在探讨Oracle排序操作的优化之前,我们首先需要理解Oracle数据库中的排序是如何发生的以及它所依赖的资源。Oracle的排序操作通常发生在以下几种情况下:创建索引、索引维护、ORDER BY、GROUP BY、DISTINCT、UNION/...

    oracle排序方法拼音,部首,笔画

    ### Oracle排序方法:拼音、部首、笔画 在Oracle数据库中,为了适应不同语言环境下的数据处理需求,提供了一套强大的多语言支持工具。其中,“NLS_SORT”参数允许用户按照不同的规则对数据进行排序,这对于处理中文...

    exp-oracle-db-architecture-master.zip

    5. **PGA(进程全局区)**:每个Oracle服务器进程或后台进程都有自己的PGA,用于存储私有数据,如SQL语句解析树和排序区。 6. **实例**:Oracle实例是SGA和运行在操作系统上的Oracle进程的集合。实例负责在内存中加载...

    oracle-SQL-note.rar_oracle

    在Oracle SQL中,DQL的基本查询涉及SELECT语句,你可以通过选择列、从表中选取数据、使用WHERE子句过滤结果、使用GROUP BY进行分组、使用HAVING进行条件过滤,以及使用ORDER BY进行排序。例如,以下查询语句将从...

Global site tag (gtag.js) - Google Analytics