最近项目过程中碰到对于数据进行排序按照升序排序需求。这需求貌似很简单,我没多想直接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. Tomcat配置自签名https
  2. 初步认识spring mvc
  3. MyBatis之使用resultMap实现高级映射
  4. 小程序的 rpx布局问题
  5. Linux的内核性能参数的调整
  6. linux 修改git端口号,SSH默认端口更改后使用Git
  7. 苹果电脑装双系统利弊有哪些
  8. 运动目标检测_帧差法
  9. 批量删除新浪微博的博文
  10. java sqlite读取数据库_java如何读写sqlite数据库
  11. 周星驰vs韩寒vs宁浩…Python告诉你春节该看哪部电影
  12. 使用python的requests模块实现百思不得其姐抓取(多线程版)
  13. 如何制作一款Chrome浏览器扩展程序
  14. 使用阿里云建站 ——记录踩过的坑
  15. 网友自曝取公积金血泪史 给你点希望又让你绝望
  16. 2020年有寓意的领证日期_2020年领证的好日子-2020有寓意的领证日期【蜜匠婚礼】...
  17. VMware,Inc. (Virtual Machine ware)
  18. 童年记忆中的水果罐头
  19. 基于 React hooks + Typescript + Cesium 场景暗角效果
  20. 华为鸿蒙系统老手机能用吗_华为鸿蒙系统是否用于手机还未确定 华为手机还会继续用安卓系统吗...

热门文章

  1. 【NOMA】Non-Orthogonal Multiple Access (NOMA) for Cellular Future Radio Access(NOMA 原理)
  2. 29-分数求模(逆元)B Jxc军训
  3. SPSS工具:聚类分析(1)快速聚类---绩效评估
  4. 到底什么是Pipeline?
  5. 企业微信第三方应用-下载excel(vue)
  6. c语言程序设计课程设计心得体会,C语言课程设计的心得体会
  7. 浙江浙大中控技术前端面经
  8. wps如何自己制作流程图_怎样用WPS文字快速制作流程图思维导图
  9. 北京信息科学技术大学复试面试////记录一次不成功的面试.
  10. idea创建第一个SpringMVC项目