Syntax

用途:

NLSSORT返回字符值char的排序规则键和显式或隐式指定的排序规则。排序规则键是一个用于根据指定的排序规则对char进行排序的字节字符串。排序规则键的属性是:按二进制比较由给定的排序规则生成的两个排序键的相互排序和按给定的排序规则比较源字符值的相互排序相同。

char和 'nlsparam' 可以是char、varchar2、nchar或NVARCHAR2中的任何类型。

'nlsparam' 的值必须具有形式 'NLS_SORT = collation'

其中collation是语言排序规则或BINARY。NLSSORT使用指定的排序规则生成排序规则键。如果省略'nlsparam',则此函数使用参数char的派生排序规则。如果指定BINARY,则此函数将char值本身转换为raw返回,并可能按下面的说明截断。

如果指定'nlsparam',则可以将后缀“_ai”附加到语言排序规则名称中,以请求不区分重音的排序规则,或者“_ci”请求不区分大小写的排序规则。有关重音和不区分大小写排序的详细信息,请参阅《 Oracle Database Globalization Support Guide》。不建议对 ORDER BY 查询子句使用不区分重音或不区分大小写的排序规则,因为它会导致不确定的排序顺序。

返回的排序键是 RAW 类型。给定排序规则对给定char值产生的排序规则键的长度可能超过NLSSORT返回的 RAW 的最大长度。在这种情况下,NLSSORT的行为取决于初始化参数 MAX_STRING_SIZE的值。如果 MAX_STRING_SIZE = EXTENDED,则返回值的最大长度为32767字节。如果排序规则键超出此限制,则函数将失败,并出现错误“ORA-12742:无法创建排序规则键”。如果短输入字符串包含的Unicode字符百分比很高且分解率很高,则也可能会报告此错误。

如果 MAX_STRING_SIZE = STANDARD,则返回值的最大长度为2000字节。如果返回值超出限度,那么NLSSORT将计算char的最大前缀或初始子字符串的排序规则键,以便计算结果不超过最大长度。对于单语排序,例如FRENCH,前缀长度通常为1000个字符。对于多语言排序,例如GENERIC_M,前缀通常为500个字符。对于Unicode Collation Algorithm (UCA)排序,例如UCA0610_DUCET,前缀通常为285个字符。根据排序规则和char中包含的字符,准确的长度可能会更低或更高。

当 MAX_STRING_SIZE = STANDARD时的行为意味着,如果两个字符值的排序键(NLSSORT结果)在前缀上没有差异,即使它们在某些进一步的字符位置上可能有所不同,则将其比较以发现语言顺序是相等的。由于隐式使用NLSSORT函数查找比较条件、between条件、in条件、order by、group by和count(distinct)的语言顺序,因此这些操作可能返回仅对长字符值近似的结果。如果您希望确保这些操作的结果是准确的,那么迁移数据库以使用MAX_STRING_SIZE = EXTENDED。

此函数不直接支持CLOB数据。但是,CLOB可以通过隐式数据转换作为参数传入。

实例

此函数可用于指定基于语言排序序列的排序和比较操作,而不是基于字符串的二进制值。下面的示例创建一个包含两个值的测试表,并显示如何通过nlsort函数对返回的值进行排序:

  1. CREATE TABLE test (name VARCHAR2(15));
  2. INSERT INTO test VALUES ('Gaardiner');
  3. INSERT INTO test VALUES ('Gaberd');
  4. INSERT INTO test VALUES ('Gaasten');
  5. SELECT *
  6. FROM test
  7. ORDER BY name;
  8. NAME
  9. ---------------
  10. Gaardiner
  11. Gaasten
  12. Gaberd
  13. SELECT *
  14. FROM test
  15. ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');
  16. NAME
  17. ---------------
  18. Gaberd
  19. Gaardiner
  20. Gaasten

下面的示例说明如何在比较操作中使用NLSSORT函数:

  1. SELECT *
  2. FROM test
  3. WHERE name > 'Gaberd'
  4. ORDER BY name;
  5. no rows selected
  6. SELECT *
  7. FROM test
  8. WHERE NLSSORT(name, 'NLS_SORT = XDanish') >
  9. NLSSORT('Gaberd', 'NLS_SORT = XDanish')
  10. ORDER BY name;
  11. NAME
  12. ---------------
  13. Gaardiner
  14. Gaasten

如果在使用相同语言排序序列的比较操作中经常使用NLSSORT,那么考虑使用这种更有效的替代方法:将 NLS_COMP 参数(对于数据库或当前会话)设置为LINGUISTIC,并将会话的NLS_SORT参数设置为所需的排序序列。在当前会话期间,Oracle数据库将默认使用该排序顺序进行所有排序和比较操作:

  1. ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
  2. ALTER SESSION SET NLS_SORT = 'XDanish';
  3. SELECT *
  4. FROM test
  5. WHERE name > 'Gaberd'
  6. ORDER BY name;
  7. NAME
  8. ---------------
  9. Gaardiner
  10. Gaasten

Oracle SQL函数-NLSSORT的更多相关文章

  1. Oracle SQL函数之数学函数

    Oracle SQL函数之数学函数 ABS(x) [功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 SQL> SELECT ABS(),ABS(-) FROM DUAL; ABS( ...

  2. Oracle SQL函数

    Oracle将函数大致分为单行函数,聚合函数和分析函数. 单行函数分为字符函数,日期函数,转换函数,数字函数,通用函数,decode函数 一.字符函数 1)大小写控制函数 01.Lower() 全部小 ...

  3. Oracle SQL函数之转换函数To_char汇总

    TO_CHAR(x[[,c2],C3])[功能]将日期或数据转换为char数据类型[参数]x是一个date或number数据类型.c2为格式参数c3为NLS设置参数如果x为日期nlsparm=NLS_ ...

  4. Oracle SQL函数之转换函数

    chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SQL> ...

  5. Oracle SQL函数之字符串函数

    1.SQL> ) from dual; --ASCLL(x)返回x的ASCLL码,CHR(x)返回ASCLL码为x的字符 ASCII() ---------- ---------- ------ ...

  6. [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行

    原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...

  7. Oracle SQL函数之聚组函数

    AVG([distinct|all]x) [功能]统计数据表选中行x列的平均值. [参数]all表示对所有的值求平均值,distinct只对不同的值求平均值,默认为all 如果有参数distinct或 ...

  8. Oracle SQL函数之日期函数

    sysdate [功能]:返回当前日期. [参数]:没有参数,没有括号 [返回]:日期 SQL> SELECT SYSDATE FROM DUAL; SYSDATE ----------- // ...

  9. ORACLE SQL 函数 INITCAP()

    INITCAP() 假设c1为一字符串.函数INITCAP()是将每个单词的第一个字母大写,其它字母变为小写返回. 单词由空格,控制字符,标点符号等非字母符号限制. select initcap('h ...

随机推荐

  1. 拼接Sql语句小心得

    在往数据库插入数据时,需要根据数据和数据库中的列信息进行拼接,在本篇文章中,输出小心得.使用语言为 python. 拼接原始列信息 比如待插入数据库列信息为 deptNo,dName, Locate, ...

  2. 由crt和key文件生成keystore文件

    该图转自知乎 海棠依旧 1.先生成p12文件,生成的时候需要指定密码 openssl pkcs12 -export -in your_crt.crt -inkey your_key.key -out ...

  3. ubuntu修改apache端口号

    第一步 sudo vi /etc/apache2/ports.conf 修改监听端口以及主机端口为8080 NameVirtualHost *:8080 Listen 8080 第二步 sudo vi ...

  4. HMAC哈希消息认证码

    收藏 137 14   hmac 编辑 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出.   中文名 哈希消息认证码 外文名 H ...

  5. [转帖]70亿!以色列间谍产品公司NSO要被卖掉了

    70亿!以色列间谍产品公司NSO要被卖掉了 2017-06-14 11:11 https://www.sohu.com/a/148739327_257305 E安全6月14日讯以色列的网络能力处于世界 ...

  6. 几个c++界面库的比较

    有些人说QT比MFC简单,QT封装得太好了,给初学者错觉,QT很简单.QT实现的功能比MFC更多(多到有些时候你觉得QT真TM啰唆,但是有时又体会到他啰唆得很强大很有柔性),显然比MFC代码更多,运行 ...

  7. C程序编译和执行

    编译 & 执行 C 程序 首先准备一个源码文件 hello.c 键入如下代码: #include <stdio.h> int main() { /* 我的第一个 C 程序 */ p ...

  8. AVR单片机教程——EasyElectronics Library v1.2手册

    索引: bit.h delay.h pin.h wave.h pwm.h led.h rgbw.h button.h switch.h segment.h 主要更新: 添加了segment.h的文档: ...

  9. 【转】python测试框架--doctest

    转自https://my.oschina.net/lionets/blog/268542 doctest 是一个 Python 发行版自带的标准模块.有两种模式可供使用. ##1 doctest 的概 ...

  10. DS AVL树详解

    先说说二叉搜索树: 是有序的二叉树,根值>左节点值,右节点值>根值. 如果要查找某个值,二叉搜索树和二分查找一样,每进行一次值比较,就会减少一半的遍历区间. 但是,如果树插入的值一直递增/ ...