Oracle SQL函数-NLSSORT
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的更多相关文章
- Oracle SQL函数之数学函数
Oracle SQL函数之数学函数 ABS(x) [功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 SQL> SELECT ABS(),ABS(-) FROM DUAL; ABS( ...
- Oracle SQL函数
Oracle将函数大致分为单行函数,聚合函数和分析函数. 单行函数分为字符函数,日期函数,转换函数,数字函数,通用函数,decode函数 一.字符函数 1)大小写控制函数 01.Lower() 全部小 ...
- Oracle SQL函数之转换函数To_char汇总
TO_CHAR(x[[,c2],C3])[功能]将日期或数据转换为char数据类型[参数]x是一个date或number数据类型.c2为格式参数c3为NLS设置参数如果x为日期nlsparm=NLS_ ...
- Oracle SQL函数之转换函数
chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SQL> ...
- Oracle SQL函数之字符串函数
1.SQL> ) from dual; --ASCLL(x)返回x的ASCLL码,CHR(x)返回ASCLL码为x的字符 ASCII() ---------- ---------- ------ ...
- [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...
- Oracle SQL函数之聚组函数
AVG([distinct|all]x) [功能]统计数据表选中行x列的平均值. [参数]all表示对所有的值求平均值,distinct只对不同的值求平均值,默认为all 如果有参数distinct或 ...
- Oracle SQL函数之日期函数
sysdate [功能]:返回当前日期. [参数]:没有参数,没有括号 [返回]:日期 SQL> SELECT SYSDATE FROM DUAL; SYSDATE ----------- // ...
- ORACLE SQL 函数 INITCAP()
INITCAP() 假设c1为一字符串.函数INITCAP()是将每个单词的第一个字母大写,其它字母变为小写返回. 单词由空格,控制字符,标点符号等非字母符号限制. select initcap('h ...
随机推荐
- 对step文件进行信息抽取算法
任务描述:给定一个step文件,对该文件的字符串进行信息抽取,结构化的组织文件描述模型的数据.形成抽象化数据结构,存入计算机数据库.并能按照有条理结构把这些数据展示出来. 信息抽取的结果描述: 1 数 ...
- Python 工匠:使用数字与字符串的技巧学习笔记
#Python 工匠:使用数字与字符串的技巧学习笔记#https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/3-tips-o ...
- vscode-tab按键失效变为切换功能的解决方法
有一种可能是无意中按到了ctrl+m,此时VSCode右下角会出现Tab Moves focus的字样,如下: 用ctrl + m 可以切换两种状态.没有Tab Moves focus字样的时候,就是 ...
- 【MongoDB学习之五】Java中使用MongoDB
环境 MongoDB 3.0 CentOS6.5_x64 相关jar:mongo-java-driver-3.0.0.jar package com.mongodb; import java.util ...
- [数据结构 - 第3章] 线性表之顺序表(C++实现)
一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...
- Centos 7.6 部署 Jumpserver 1.5.0
1.基础设置 # 版本说明 操作系统:centos7. jumpserver: # 升级所有包同时也升级软件和系统内核 yum update -y # selinux配置 setenforce sed ...
- MATLAB自定义函数
MATLAB自定义函数形式 function [a,b,c] = funname(x1,x2,x3) 输入变量 对于输入变量,MATLAB可以识别输入变量的个数,通过nargin来记录当前输入变量个数 ...
- openjudge4979 - 海贼王之伟大航路 题解
原题链接 题目简要分析 N个点,从1号点到N号点求最短路径,且每个点都要遍历到.现在要你求出最优方案. 这道题看到后,首先的想法莫过于搜索.暴力了.这显然不太可能.而进一步思考,使用Floyed和Di ...
- OracleVM桥接网卡无法获取本地连接网卡
问题现象 VM虚拟机采用桥接网卡时,界面名称为"未指定",无法获取本地连接对应网卡信息: 处理方式: 进入本地连接,选择本地连接右键进入属性设置窗口; 选择安装,单击服务选项后点击 ...
- 【EBS】菜单的复制脚本
DECLARE l_error_flag ); l_menu_rowid ); l_menu_entity_rowid ); l_menu_id NUMBER; l_cnt ; c_new_menu_ ...