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函数对返回的值进行排序:

CREATE TABLE test (name VARCHAR2(15));
INSERT INTO test VALUES ('Gaardiner');
INSERT INTO test VALUES ('Gaberd');
INSERT INTO test VALUES ('Gaasten');
SELECT *
FROM test
ORDER BY name;
NAME
---------------
Gaardiner
Gaasten
Gaberd
SELECT *
FROM test
ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');
NAME
---------------
Gaberd
Gaardiner
Gaasten

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

SELECT *
FROM test
WHERE name > 'Gaberd'
ORDER BY name;
no rows selected
SELECT *
FROM test
WHERE NLSSORT(name, 'NLS_SORT = XDanish') >
NLSSORT('Gaberd', 'NLS_SORT = XDanish')
ORDER BY name;
NAME
---------------
Gaardiner
Gaasten

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

ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
ALTER SESSION SET NLS_SORT = 'XDanish';
SELECT *
FROM test
WHERE name > 'Gaberd'
ORDER BY name;
NAME
---------------
Gaardiner
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. vmare_mac 关闭完整性检查

    今天在vmware 15 安装mac10.13,安装之后不能全屏,查了很多资料最后完美解决 首先我们需要进入mac的恢复模式 等待出现苹果LOGO,直到进度条加载完毕 然后打开实用工具-终端 关闭SI ...

  2. Gerrit - 初始配置

    1 - 插件管理 1.1 下载并安装插件 以reviewers插件为例. 在GerritForge(https://gerrit-ci.gerritforge.com/),找到对应gerrit 版本的 ...

  3. 【MongoDB学习之二】MongoDB数据库、文档、集合、元数据

    环境 MongoDB 4.0 CentOS6.5_x64 一.连接语法格式: mongodb://[username:password@]host1[:port1][,host2[:port2],.. ...

  4. js生成条形码——JsBarcode

    原文地址:https://www.cnblogs.com/huangenai/p/6347607.html 介绍一下在GitHub生成条形码的js插件→JsBarcode 条码支持的有: CODE12 ...

  5. STL之空间配置器allocator

    摘要 C++STL的空间配置器将内存的分配.释放,对象的构造.析构都分开执行,内存分配由alloc::allocate()负责,内存的释放由alloc::deallocate()负责:对象的构造由:: ...

  6. 常用的sublime text 3插件

    原文出自:peter_zhou(晴空)https://www.cnblogs.com/qingkong/ All Autocomplete Sublime Text 默认的 Autocomplete ...

  7. mysql新增用户无法授权!? 解决方案

    先上解决方法  :) 创建用户cat 密码 CREATE USER '; 修改user表中的注册用户cat update user set host='%' where user='cat'; 授权: ...

  8. IDEA的java源码文件左边有一个红色的J

    解决办法: 如果源码文件这里已经有一个路径,那就添加现在的.java文件所在目录,或者删除了再重新添加

  9. 将python工程部署到新服务器(对virtualenv工具进行环境迁移)

    将python工程部署到新服务器(对virtualenv工具进行环境迁移) # 从开发的电脑上导出 pip list 到 requirements.txt 文件pip freeze > requ ...

  10. 【C语言】学不会的指针

    指针 前言: 指针是C语言程序的核心,刚开始学指针,嗯....这样呀,貌似不难呀:之后开始用指针,&p,p,*p,**p,这些指针在用的时候,额.....什么东东?每次都要想半天,特别是遇到双 ...