Oracle的汉字排序问题

关于oracle对汉字的排序 最近项目过程中碰到对于数据进行排序按照升序排序需求。这需求貌似很简单,我没多想直接order by columnName。忽略了汉字排序的问题导致bug的出现。   业务要求,按照excel中排序出来的结果。对于汉字excel默认是按照拼音排序的,那么问题来了,oracle对于汉字究竟是如何排序的? 经查阅资料发现,对于oracle对汉字排序的问题网上说法不一。有的说是根据二进制编码排序的,... 阅读详情

oracle在9i之前是对汉字的排序是按照二进制编码进行排序的,很不适合我们的国情,在oracle9i之后,汉字的排序方式有了以下三种方式:
1、使用拼音排序 NLS_SORT=SCHINESE_PINYIN_M
2、使用笔画排序 NLS_SORT=SCHINESE_STROKE_M 第一顺序笔画,第二顺序部首;
3、使用偏旁部首排序 NLS_SORT=SCHINESE_RADICAL_M 第一顺序部首,第二顺序笔画;

    这样,就可以在查询的时候,指定汉字的排序方式,设定方式可以分为以下三个级别:
    1、语句级别设置排序方式:
         按照笔划排序:
          select * from table order by nlssort(col,'NLS_SORT=SCHINESE_STROKE_M');
          按照部首排序:
          select * from table order by nlssort(col,'NLS_SORT=SCHINESE_RADICAL_M');
          按照拼音排序:
         select * from table order by nlssort(col,'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)  
           HKLC\SOFTWARE\ORACLE\home0\NLS_SORT (win注册表);

可以使用如下方法可以查看oracle的一些默认参数(注意标红的参数值):
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL>
SQL> select * from nls_database_parameters;

PARAMETER VALUE


NLS_LANGUAGE AMERICAN
NLS_NCHAR_CHARACTERSET UTF8
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_SORT BINARY
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_RDBMS_VERSION 10.2.0.1.0

Oracle 中文排序 Oracle 中文字段排序 一、情景描述 1、在实际开发中,遇到字段排序的情况,大概如下: 2、正序的需求是: 一类、二类、三类 ; 倒序需求是: 三类、二类、一类。 3、从图中可以看到,使用默认的排序,达不到预期效果,那么 Oracle中,对于中文排序该如何处理呢?二、问题解决 1、使用 nlssort 函数,解决中文排序问题。 2、Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT 阅读详情

相关推荐

工业级越界行为识别数据集:YOLOv8/v9直接训练的围栏异常检测资源

越界行为识别是智能安防与工业安全中的基础视觉任务,其核心在于对人员、车辆等目标跨越物理边界(如围栏、警戒线、作业禁区)的精准检测与分割。该技术依赖于高质量实例分割标注、归一化坐标格式及场景鲁棒性设计,具备低延迟、高召回、强泛化等工程价值,广泛应用于智慧工地电子围栏、化工厂禁区告警、物流园区越界监控及变电站安全巡检等真实工业场景。本数据集以YOLOv8/v9为基准构建,提供万张实拍+合成图像、像素级Segmentation标注、分层划分与完备元数据,开箱即用,直击工业落地中数据清洗、格式转换与标注不一致等关键

weixin_30080745的博客 317

Oracle数据库调整字段顺序的方法

之前使用mysql时,如果需要调整字段的顺序,可以使用Navicat客户端直接拖动要调整的字段至需要的位置即可。如果使用的是Oracle数据库,不管是用Natvicat还是使用PL SQL客户端,拖动字段顺序并不能调整字段的顺序,正确的方法是使用SQL来调整。具体方法是: 1、使用oracle自带的sys、system等账号登录PL SQL等客户端 2、执行如下SQL查询出想调整字段顺序的表格的id select object_id from all_objects where owner = 'Ji

shenxiaomo1688的博客 1万+

基于JAVA的GB28181实现之SIP服务核心组件解析

本文深入解析了基于JAVA的GB28181标准中SIP服务的核心组件实现,包括协议栈选择、消息处理引擎、事务管理器等关键技术点。通过实战案例分享海康威视、大华设备的特殊处理技巧,并提供性能优化和常见问题排查指南,帮助开发者高效构建稳定的视频监控系统。

weixin_30892037的博客 264

Oracle对中文内容排序

目前需要开发的Oracle数据库中有些表记录的内容是中文的,需要按照中文的方式进行排序。 如果查询的结果字符集为ZHS16GBK/ZH16GBK,则使用order by默认是按照汉字的拼音顺序进行排序的;否则为其他(如UTF8等字符集),那么汉字的排序是按照BINARY排序的,那么此时可以使用Oracle提供的NLS_SORT进行排序。 三、解决方法 这是人员表中的原内容: 执行示例结果如下: 执行示例结果如下: 执行示例结果如下: 这是区域表中的原内容:实现对汉字一

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 3886

Raptor码(一):2007RFC5053标准编解码学习

RFC 5053 标准

a_beatiful_knife的博客 3493

C语言 100道经典编程题适用于专升本,专接本【详细分析版】_c语言专升本题目

/法2//left指向起始 right指向数组末尾= 0){left++;//如果*left是奇数就循环接着向后指,直到指向偶数就退出//(left

2401_84978503的博客 695

oracle中的中文排序,Oracle下的中文排序

Oracle下的中文排序alter session set nls_sort='schinese_pinyin_m';select * from dept order bynlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值SCHIN...

weixin_36215894的博客 1257

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 632

Oracle 中汉字排序问题

    oracle9i对汉字的排序默认为拼音排序,可是本人最近发新排列的结果并不准确,通过上网查找,现解决方法如下: 方法1: 设定环境变量 set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT (sh) or setenv NLS_SORT SCHINESE_RADICAL_M (csh) or regedit  HK

旺仔专栏 2916

Allegro负片层不显示反盘的原因和解决办法

在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图。如何才能看到反盘显示的效果,具体操作如下。负片层不显示反盘的原因和解决办法。L2层仍然只能看到盘。

weixin_54787054的博客 2160

YOLOv11 改进 - 注意力机制 | HaloNet 局部自注意力 (Local Self-Attention) 以分块交互策略实现高效全局上下文建模

本文介绍了局部自注意力机制(HaloAttention)在YOLOv11中的结合应用。局部自注意力通过关注输入数据局部区域来捕捉特征关系,能降低计算复杂度、增强局部特征捕捉,且可与CNN结合。其计算时先定义局部窗口,再计算注意力权重并加权求和。我们将HaloAttention集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,改进后的模型在目标检测和实例分割等任务中表现更佳,证明了自注意力模型在传统卷积主导领域的有效性。

魔改工程师的博客 1142

Oracle11g 汉字排序问题

昨天发现一个客户数据品牌排序不是按汉字的拼音排序的,查了其他有汉字的表发现也有同样的问题,最后就开始百度,发现Oracle可以按一下三种方式排序 1、使用拼音排序  select * from t orderby nlssort(field,'NLS_SORT=SCHINESE_PINYIN_M');  2、使用笔画排序  select * from t orderby nlssort

zhangjunwei102的专栏 1563

一文读懂OpenClaw:核心组件与工作原理深度解析

Agent核心:负责理解意图、规划任务、协调执行消息系统:统一的消息格式,实现组件间解耦工具注册表:可扩展的工具系统,支持自定义工具模型适配层:多模型支持,统一API接口安全机制:沙箱隔离、权限确认、操作审计性能优化:并行执行、智能缓存、增量更新理解这些核心组件和工作原理,将帮助你更好地使用OpenClaw,也为后续开发自定义扩展打下坚实基础。在下一篇文章中,我们将详细介绍OpenClaw的界面操作,包括命令行与交互模式的各种技巧。

gaoxiang_120的专栏 833

Oracle 的汉字排序问题

Oracle 的按拼音、笔画、偏旁部首对汉字进行排序

wzy0623的专栏 4147

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

oracle汉字排序问题

经常遇到汉字排序问题,比如省份按序排列之后方便查看: select * from tbl_province_inf order by nlssort(PROVINCENAME,'NLS_SORT=SCHINESE_PINYIN_M')

斌斌(Java) 869

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

解决oracle排序时按照汉字拼音排序不正确的问题

1.使用NLSSORT函数 在order by 时,转换一下汉字列为(NLSSORT(包含汉字的排序列,'NLS_SORT =SCHINESE_PINYIN_M')) 参数说明: SCHINESE_RADICAL_M  按照部首(第一顺序)、笔划(第二顺序)排序   SCHINESE_STROKE_M  按照笔划(第一顺序)、部首(第二顺序)排序   SCHINESE_PINYIN_M

nvhaixx的专栏 3533

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Oracle中文(汉字)排序的问题

Oracle支持的中文(汉字)排序有以下几种: 1、按照拼音排序: select * from your_table_name t order by nlssort(t.ordered_column_name,'NLS_SORT=SCHINESE_PINYIN_M') 2、按照笔画数排序: select * from your_table_name t order by n...

can_do_it的专栏 288

ORACLE中汉字排序的问题

[code="sql"] -- 按拼音排序 (系统默认) select * from T_0303003 order by nlssort(stock_holder,'NLS_SORT=SCHINESE_PINYIN_M'); -- 按部首排序 select * from T_0303003 order by nlssort(stock_holder,'NLS_SORT=SCH...

IT生活 134

Oracle中对数字加汉字的排序(再完善)

问题是随着需求的变化逐步发现并解决的,之前写过oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍和Oracle中对数字加汉字的排序(完善), 这次数据又不一样了 第一次是数字在前汉字在后且数字没有重复,如下 第二次是数字有重复,且数字前后内容相同,如下 这次和第二次唯一不同的是数字后面内容是不同的,如下: 第一种排序: SELECT * FROM test2 order by...

itmyhome的专栏 2675

汉字 order by oracle,oracle 使用order by 对汉字进行多字段排序

今天遇到一个奇怪的问题, 在两个不同的数据库里执行同样的sql语句, 相同的数据却排序结果不一致。 执行sql如下: select decode(brch.LOCAL, 'Y', '国内', '国际') as local, brch.COUNTRY, brch.PROVINCE, brch.CITY, brch.AREA, brch.VENDOR, brch.SERVI今天遇到一个奇怪的问题, 在...

weixin_34321959的博客 672

oracle汉字排序

最近项目过程中碰到对于数据进行排序按照升序排序需求。这需求貌似很简单,我没多想直接order by columnName。忽略了汉字排序的问题导致bug的出现。 业务要求,按照excel中排序出来的结果。对于汉字excel默认是按照拼音排序的,那么问题来了,oracle对于汉字究竟是如何排序的? 经查阅资料发现,对于oracle对汉字排序的问题网上说法不一。有的说是根据二进

QBL_user的博客 460

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

最近项目过程中碰到对于数据进行排序按照升序排序需求。这需求貌似很简单,我没多想直接order by columnName。忽略了汉字排序的问题导致bug的出现。业务要求,按照excel中排序出来的结果。对于汉字excel默认是按照拼音排序的,那么问题来了,oracle对于汉字究竟是如何排序的?经查阅资料发现,对于oracle对汉字排序的问题网上说法不一。有的说是根据二进制编码排序的,有的却说是根据...

weixin_28868483的博客 470

Oracle——复杂排序以及排序分页后可能出现的问题

Oracle中的复杂排序,以及排序和分页结合后,排序紊乱问题解决

专注写bug 637

ORACLE通过汉字手写字母模糊查询

经测试,该函数对多音字查询时不适用 CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS    V_COMPARE VARCHAR2(100);    V_RETURN VARCHAR2(4000);       FUNCTION F_NLSSORT(P_WORD IN V...

qq_37596792的博客 788

【Oracle】【28】中文排序

前言: 不做处理,直接用order by排序的话,其实是按对应字符的ASCII码排的。如果是一级汉字(常用汉字)没有问题,和拼音排序是一致的,但是二级汉字(不常用汉字)就有问题了 正文: 1,按照拼音顺序 ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_PINYIN_M') 2,按照部首顺序 ORDER BY nlssort(N...

aizhu4795的博客 129
上一篇: 在Oracle中使用rank()over()排名的问题
下一篇: oracle 列转行(把一个表的所有列连成一行,用逗号分隔)
SkidRow_xp
博客等级 码龄6年 0粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值