最近项目过程中碰到对于数据进行排序按照升序排序需求。这需求貌似很简单,我没多想直接order by columnName。忽略了汉字排序的问题导致bug的出现。

业务要求,按照excel中排序出来的结果。对于汉字excel默认是按照拼音排序的,那么问题来了,oracle对于汉字究竟是如何排序的?

经查阅资料发现,对于oracle对汉字排序的问题网上说法不一。有的说是根据二进制编码排序的,有的却说是根据拼音排序的。

自己试了试,肯定默认不是拼音排序。可能是二进制编码吧。

说下具体怎么改,也是转载网上的一些方法。

1、语句级别设置排序方式:

//按照笔划排序

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');

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、修改系统参数(数据库所在操作系统):

set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT (sh)setenv NLS_SORT SCHINESE_RADICAL_M (csh)  HKLCSOFTWAREORACLEhome0NLS_SORT (win注册表);

我这里只是用来语句级别的就可以了。

回到系统默认排序的问题就是设置数据库的NLS_SORT 这个参数

通过查看select * from nls_database_parameters; 数据库参数

我的默认值为BINARY

Oracle 官方说明:

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.

BINARY是二进制编码排序的设定。

oracle 汉字和英文排序,关于oracle对汉字的排序相关推荐

  1. java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序

    java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序 工具类如下: package com.acconsys.util;import java.util ...

  2. Oracle参数为英文或数字,ORACLE中将数字转换为英文

    SELECT LEVEL, to_char(to_date(LEVEL,'J'),'Jsp') FROM dual CONNECT BY LEVEL <= 1000 运行结果如下图所示: 说明: ...

  3. oracle 去掉值英文,如何在Oracle数据库中屏蔽英文提示信息

    在应用程序中,系统提示信息为用户提供参考信息,帮助用户正确使用系统.但运行Oracle form时,屏幕下方信息行的提示信息却是英文.当有两个以上信息等待在信息行上显示时,这些英文信息还会以窗口方式出 ...

  4. java过滤汉字和英文,java判断及过滤汉字

    packagecom.test;importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classTest { @org. ...

  5. asp.net 将中文汉字转换为英文首字母和将汉字转换为拼音全拼

    数据库:Account 表名:Customer 列名:PinYin /// <summary>     /// 获取汉字的首字母和全拼     /// </summary>   ...

  6. Oracle 10g如何对用户姓名,按首字母排序、查询

    2019独角兽企业重金招聘Python工程师标准>>> 首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序 ...

  7. oracle按照姓名查询,Oracle 10g如何对用户姓名,按首字母排序、查询

    首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M   按 ...

  8. oracle数据库的字段怎么排序规则,Oracle中文、数字混杂字段的排序

    对Oracle中中文.数字混杂形式的字段进行排序的方法: 例如: orderbyNLSSORT(字段名,'NLS_SORT = SCHINESE_PINYIN_M'), to_number(trans ...

  9. oracle 首位是字母,Oracle 10g如何对用户姓名,按首字母排序、查询

    首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M   按 ...

  10. oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

最新文章

  1. WCF-学习笔记概述之计算服务(1)
  2. 51nod1236 序列求和 V3
  3. Linux下Nginx访问web目录提示403Forbidden
  4. 怎么解决tomcat占用8080端口问题
  5. python转二进制字符串_python如何将二进制串(UTF-8)转换为字符串?
  6. Eclipse中文显示乱码问题
  7. fx-1s可以用c语言,AX-1S 系列微型可编程控制器100兼容三菱FX-1S系列PLC)
  8. 高中计算机会考在线模拟考试,高中信息技术会考练习试题及答案
  9. 找到一个电信代理服务器~
  10. DataSource 详解
  11. WinCC RT Adv 项目下载与自动运行
  12. AndroidStudio软件用法详细说明
  13. 深入学习Redis系列文章
  14. 2000年英语一真题及答案
  15. ext 6.0开发实例二
  16. 中小型企业Web开发框架
  17. 02 C语言使用队列实现缓存模块QueueBuffer
  18. C语言数组名、数组名取地址、数组首元素地址之间的关系
  19. “1024”讲话两个月后,深交所正式发布区块链50指数,板块再迎利好
  20. 实现Google测试框架及输出彩色的文字

热门文章

  1. nw.js 软件推荐:AxeSlide斧子演示:PPT的另一种可能(转)
  2. 【三星官方教程】如何为Gear VR 开发应用(一):开发环境搭建
  3. 用java输出正方形,等腰三角形,直角三角形
  4. zigbee协议栈初使用(三)无线数据传输
  5. 四个月没发工资了,你们呢?
  6. 物料主数据创建屏幕增强之SPRO配置
  7. ME21N,ME22N,ME23N之BADI增强ME_PROCESS_PO_CUST
  8. python apply_async死锁_python之并发编程(线程\进程\协程)
  9. INFO:Windows Rundll 和 Rundll32 接口
  10. 亚马逊第三大卖家国家巴基斯坦电商营商环境如何?且看跨境电商数字身份验证服务商ADVANCE.AI要参解析