`

(转)nlssort 排序 NLS_SORT

阅读更多

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__汉字排序

    1. **拼音排序**:通过设置`NLS_SORT=SCHINESE_PINYIN_M`来进行拼音排序。 - 实现方式: ```sql SELECT * FROM table ORDER BY NLSSORT(col, 'NLS_SORT=SCHINESE_PINYIN_M'); ``` 2. **笔画排序**:通过设置`...

    oracl几个函数

    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 ...

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

    2. **按部首排序**:如果需要根据汉字的部首进行排序,同样可以使用`NLSSORT`函数,但需要改变`NLS_SORT`的值。例如: ```sql select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_STROKE_M'); ```...

    oracle数据库汉字首字排序

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

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

    但是,我们可以通过修改`nls_sort`参数来更改默认的排序方式。 **示例代码:** ```sql ALTER SESSION SET NLS_SORT = SCHINESE_STROKE_M; ``` 这行代码会将当前会话的默认排序方式更改为笔画排序。 #### 五、总结...

    oracle指定排序的方法详解

    要实现会话级别的排序设置,可以使用ALTER SESSION命令来改变NLS_SORT参数的值,从而改变当前会话中的数据排序规则。以下是具体的命令实例: - 按拼音排序: ALTER SESSION SET NLS_SORT=SCHINESE_PINYIN_M; - ...

    ORACLE常用函数总结

    12. NLSSORT(col, ['nls_param'])函数: - 作用:按照nls_param指定的方式对col字段进行排序,适用于多语言环境的排序需求。 - 示例:未提供,但使用方法类似其他函数,需要指定字段和排序方式。 以上是对Oracle...

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

    在本例中,通过设置排序规则为 `nls_sort=schinese_pinyin_m`,可以将输入的汉字转换为其对应的拼音码。具体来说: - 首先,函数会遍历输入字符串中的每一个字符,并分别调用 `fn_nlssort` 函数来获取该字符的拼音...

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

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

    oracle排序

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

    oracle函数大全

    SELECT * FROM 表名 ORDER BY NLSSORT(字段名, 'NLS_SORT=SCHINESE_RADICAL_M'); ``` ##### 12. REGEXP_REPLACE(ch_source, pattern) - **功能**:使用正则表达式替换字符串中的匹配项。 - **语法**:`REGEXP_...

    oracle字符函数.pdf

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

    Oracle汉字拼音首字母函数

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

    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...

    sql 按拼音首字母排序

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

    oracle姓名中文转全拼函数

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

    Oracle9i的init.ora参数中文说明

    可以使用 NLS_COMP 指定必须根据NLS_SORT 会话参数进行语言比较。 值范围: Oracle8i National Language Support Guide 中指定的任何有效的10 字节字符串。 默认值: BINARY nls_currency: 说明: 为 L 数字格式...

Global site tag (gtag.js) - Google Analytics