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. “无法启动IIS Express Web服务器”的解决办法

    “无法启动IIS Express Web服务器”的解决办法 听语音 原创 | 浏览:259 | 更新:2019-07-15 13:02 1 2 3 4 5 6 7 分步阅读 在使用visual stu ...

  2. maven基础依赖外部lib包(依赖钉钉sdk为例)

    jar包放置位置 pom.xml指定依赖 1 <dependencies> 2 <!--钉钉工具包,如缺失请到钉钉服务器开发文档下载--> 3 <dependency&g ...

  3. vue install 组件

    import share from './index.vue' export default { install: (Vue) => { Vue.prototype.$share = (opti ...

  4. EasyNVR摄像机网页无插件直播方案H5前端构建之:通道内部搜索功能的实现方案与代码

    EasyNVR网页摄像机直播方案 EasyNVR是一款拥有完整.自主.可控知识产权,同时又能够具备软硬一体功能的安防互联网化流媒体服务器,能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络 ...

  5. 【设计】Facebook的语调设计-做的珍惜

    http://www.woshipm.com/pd/3206743.html 做的是真细呦

  6. win32 event事件

    原文地址:https://blog.csdn.net/u011394598/article/details/82981399 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是 ...

  7. react 常用组件整理

    0.es6语法糖 deptList = deptnameList.filter(item => item.rel ===this.state.thUser.orgId);//返回一个新的数组对象 ...

  8. RubyGem镜像/ruby国内镜像

    RubyGem 网上推荐的淘宝的镜像已经无法访问 清华镜像 # 添加 TUNA 源并移除默认源 gem sources --add https://mirrors.tuna.tsinghua.edu. ...

  9. Kubernetes 原理架构介绍(一)

    目录 一.Kubernetes 是什么 二.Kubernetes 设计架构 三.Kubernetes的核心技术概念和API对象 Cluster Master Node Pod Controller D ...

  10. [ARM-Linux开发] 嵌入式 linux如何生成ko文件

    hello.c文件如下 驱动程序: #include <Linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm ...