`
123003473
  • 浏览: 1064623 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

nls_sort和nlssort 排序功能介绍

 
阅读更多
ALTER SESSION SET NLS_SORT=''; 排序影响整个会话
Oracle9i之前,中文是按照二进制编码进行排序的。  
   
    在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值    
   
    SCHINESE_RADICAL_M   按照部首(第一顺序)、笔划(第二顺序)排序    
   
    SCHINESE_STROKE_M   按照笔划(第一顺序)、部首(第二顺序)排序    
   
    SCHINESE_PINYIN_M   按照拼音排序
oracle9i中新增了按照拼音、部首、笔画排序功能
拼音 SELECT * FROM TEAM ORDER BY NLSSORT(列名,'NLS_SORT = SCHINESE_PINYIN_M')
笔划 SELECT * FROM TEAM ORDER BY NLSSORT(列名,'NLS_SORT = SCHINESE_STROKE_M')
部首 SELECT * FROM TEAM ORDER BY NLSSORT(列名,'NLS_SORT = SCHINESE_RADICAL_M')




Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。
1、设置NLS_SORT参数值
      SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
      SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
      SCHINESE_PINYIN_M 按照拼音排序
2、Session级别的设置,修改ORACLE字段的默认排序方式:
      按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;
      按笔画:alter session set nls_sort = SCHINESE_STROKE_M;
      按偏旁:alter session set nls_sort = NLS_SORT=SCHINESE_RADICAL_M;
3、语句级别设置排序方式:
      按照笔划排序
      select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
      按照部首排序
      select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
      按照拼音排序,此为系统的默认排序方式
      select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
4、修改系统参数(数据库所在操作系统):
      set NLS_SORT=SCHINESE_RADICAL_M ;
       export NLS_SORT (sh)
       setenv NLS_SORT SCHINESE_RADICAL_M (csh)
      HKLC\SOFTWARE\ORACLE\home0\NLS_SORT (win注册表)


Oracle 官方说明

NLS_SORT NLS_SORT specifies the collating sequence for ORDER BY queries. NLS_COMPNLS_COMP specifies the collation behavior of the database session.


Property
Description
Parameter type
String
Syntax
NLS_SORT = { BINARY | linguistic_definition }
Default value
Derived from NLS_LANGUAGE
Modifiable
ALTER SESSION
Range of values
BINARY or any valid linguistic definition name


If the value is BINARY, then the collating sequence for ORDER BY queries is based on the numeric value of characters (a binary sort that requires less system overhead).
If the value is a named linguistic sort, sorting is based on the order of the defined linguistic sort. Most (but not all) languages supported by the NLS_LANGUAGE parameter also support a linguistic sort with the same name.
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.
         You must use the NLS_SORT operator with comparison operations if you want the linguistic sort behavior.


Property
Description
Parameter type
String
Syntax
NLS_COMP = { BINARY | LINGUISTIC | ANSI }
Default value
BINARY
Modifiable
ALTER SESSION
Basic
No

Values:
BINARY
Normally, comparisons in the WHERE clause and in PL/SQL blocks is binary unless you specify the NLSSORT function.
LINGUISTIC
Comparisons for all SQL operations in the WHERE clause and in PL/SQL blocks should use the linguistic sort specified in the NLS_SORT parameter. To improve the performance, you can also define a linguistic index on the column for which you want linguistic comparisons.
ANSI
A setting of ANSI is for backwards compatibility; in general, you should set NLS_COMP to LINGUISTIC

注意:当使用了NLS_SORT或NLS_COMP,应该指定函数索引来提高数据库性能。如
create index [schema.]indexName on tableName(function(propertyName))

注意:虽然能在oracle查询的时候能用得上,但不知道为什么,当映射到hibernate上时却无效,依然按NLS_SORT=binary排序,不过可以使用@org.hibernate.annotation.OrderBy("nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M')")指定排序方法
分享到:
评论

相关推荐

    oracle__汉字排序

    通过上述介绍,我们可以看到Oracle数据库提供了多种方式来设置汉字的排序规则,包括拼音排序、笔画排序和部首排序等。这些排序规则的设置不仅可以在会话级别进行,也可以在系统级别进行。对于不同的应用场景,可以...

    对Oracle 排序中的几种常用排序的介绍

    在处理中文数据时,尤其要注意使用`NLSSORT`和相应的`NLS_SORT`参数,以确保排序的正确性。同时,合理利用DECODE和NVL函数可以更好地处理字段值可能为NULL的情况。在进行分页查询时,理解`ROWNUM`的工作原理和优化...

    oracl几个函数

    在Oracle 9i及之后的版本中,新增了基于拼音、部首和笔画的排序功能,通过设置`NLS_SORT`参数来实现。 - `SCHINESE_RADICAL_M`:按照部首(第一顺序)、笔划(第二顺序)进行排序。 - `SCHINESE_STROKE_M`:按照...

    oracle数据库汉字首字排序

    - `sort_rule`:指定排序规则的参数,如`'NLS_SORT=SCHINESE_PINYIN_M'`表示按照简体中文的拼音顺序进行排序,并且区分大小写(M表示区分大小写)。 **示例代码**: ```sql SELECT DEPTID, DEPTNAME FROM TDEPT ...

    ORACLE常用函数总结

    本篇将重点介绍在SQL查询和PL/SQL编程中常用的Oracle字符函数,它们可以帮助我们进行数据的处理和分析。 1. ASCII(n)函数: - 作用:返回字符串的第一个字符的ASCII码值。如果输入的是非英文字符,如中文,它会...

    中文排序方式:拼音,笔画,边傍

    本文将详细介绍三种中文排序方式——拼音排序、笔画排序和偏旁排序,并通过具体示例来展示如何在数据库系统中实现这些排序。 #### 一、拼音排序 拼音排序是最常用的中文排序方式之一,它按照汉字的拼音字母顺序...

    oracle指定排序的方法详解

    除了会话级别和语句级别的设置外,也可以在数据库所在操作系统的层面修改NLS_SORT参数,这会改变整个数据库系统默认的排序规则。在UNIX或Linux系统中,可以通过环境变量来设置: - 对于sh环境: export NLS_SORT=...

    Oracle 中文字段进行排序的sql语句

    `NLSSORT`函数允许我们指定一个排序规则,这里我们设置`NLS_SORT=SCHINESE_STROKE_M`,其中`SCHINESE_STROKE_M`是排序方式,表示按照中文字符的笔画进行排序。完整的SQL语句如下: ```sql SELECT * FROM Table ...

    oracle函数大全

    本文档将详细介绍Oracle中的字符函数,包括它们的功能、语法以及示例应用,帮助开发者更好地理解和运用这些功能强大的工具。 #### 二、字符函数详解 ##### 1. CHR(n) - **功能**:返回ASCII码为n的字符。 - **...

    oracle排序

    SELECT * FROM (SELECT * FROM perexl ORDER BY NLSSORT(danwei, 'NLS_SORT=SCHINESE_PINYIN_M')) C WHERE ROWNUM = 1; 七、降序排序 在 Oracle 中,可以使用 DESC 关键字对数据进行降序排序。例如,以下语句将对 ...

    oracle字符函数.pdf

    12. NLSSORT(col, [nls_param])函数:此函数用于根据指定的NLS参数对字符串col进行排序。这在处理多语言数据时特别有用,因为它可以根据不同的排序规则(如拼音、部首或笔画)进行排序。 了解并熟练使用这些Oracle...

    Oracle汉字拼音首字母函数

    `NLSSORT`函数可以按照指定的语言环境对字符串进行排序,这里通过设置参数`'NLS_SORT=SCHINESE_PINYIN_M'`,可以使得每个汉字被转换为其拼音并按拼音排序。通过这种方式,我们可以在内部逻辑中比较不同汉字的拼音值...

    sql 按拼音首字母排序

    在这个场景下,使用的排序规则是`NLS_SORT=SCHINESE_PINYIN_M`,这意味着函数将根据汉字的拼音来生成编码。NLSSORT是Oracle数据库中的内置函数,用于支持多语言排序,通过设置不同的排序规则,可以满足不同语言环境...

    EasyUI Datagrid 中文排序的问题

    SELECT * FROM table WHERE 1=1 ORDER BY NLSSORT(t_.NAME, 'NLS_SORT=SCHINESE_PINYIN_M'); ``` 其中,`SCHINESE_PINYIN_M` 表示使用简体中文拼音排序规则。 2. **MySQL数据库**: MySQL 可以通过 `CONVERT` ...

    Oracle函数大全

    - **示例**: `NLSSORT('hello world', 'nls_sort=AMERICAN')` 返回排序后的结果 ##### 13. NLS_UPPER(str,'nls_param') 根据`nls_param`参数设置,将字符串`str`转换为全大写形式。 - **示例**: `NLS_UPPER('hello...

    oracle汉字转拼音函数整理大全

    `NLSSORT` 函数是Oracle用来根据指定的排序规则对字符串进行排序的功能。在本例中,通过设置排序规则为 `nls_sort=schinese_pinyin_m`,可以将输入的汉字转换为其对应的拼音码。具体来说: - 首先,函数会遍历输入...

    Oracle9i的init.ora参数中文说明

    说明: 指定数据库的默认语言, 该语言将用于消息, 日期和月份名, AD, BC, AM 和 PM 的符号, 以及默认的排序机制。可支持的语言包括英语, 法语和日语等等。 值范围: 任何有效的语言名。 默认值: 根据操作系统而定 ...

    oracle姓名中文转全拼函数

    在这个案例中,`nls_sort=schinese_pinyin_m`排序规则被用来获取每个汉字的拼音首字母。`fn_nlssort`是一个辅助函数,其目的是对输入的汉字字符串应用上述的排序规则。 函数通过循环遍历输入的字符串,每次处理一个...

Global site tag (gtag.js) - Google Analytics