Oracle的nlssort函数
nlssort函数的作用是对字段排序字符串类型的1.按拼音排序select * from MEMBER t order by NLSSORT(t.b,NLS_SORT SCHINESE_PINYIN_M)2.按笔画排序select * from MEMBER t order by NLSSORT(t.b,NLS_SORT SCHINESE_STROKE_M)3.按部首排序select * from MEMBER t order by NLSSORT(t.b,NLS_SORT SCHINESE_RADICAL_M)java 汉字按照拼音排序数据库中按照拼音排序很简单SELECT DISTINCT province_name, province_code FROM metadata_township ORDER BY convert(province_name USING gbk) asc一般的排序都是能正确的但是有的多音字啥的会有点差别例如重庆按理说是重是“chong”但是排序的时候会按照“zhong”,就会排在靠后的。Java中按照拼音排序我的list里面是对象对象里面含有需要按照拼音排序的字段name我用的lambda表达式来简化代码。/***(o1, o2) - Collator.getInstance(Locale.CHINA).compare(o1.getName(), o2.getName()) 排序规则根据汉字的拼音来排序升序* list 是需要排序的集合*/Collections.sort(list,(o1, o2) - Collator.getInstance(Locale.CHINA).compare(o1.getName(), o2.getName()));根据这个得到的排序大部分都是正确的跟前面sql里面排序的结果差不多多音字生僻字会不准确。默认的Collection.sort()是按照ASCII码排序, 不过, 有第二个重载方法, 第二个参数可以传入Comparator对象java.text.Collator可以用于本地语言排序, 自身已经实现Comparator接口.Collator.getInstance(Locale.CHINA)获取到我们中文的Collator实例/** * 按照拼音首字母排序 */ Test public void test() { ListString data new ArrayList(Arrays.asList(上海, 天津, 北京, 深圳, 广州, 成都, 西安, 武汉, 郑州, 邯郸, a, z, A, Z)); Collator collator Collator.getInstance(Locale.CHINA); Collections.sort(data, collator); for (String str : data) { System.out.print(str ); } }java实现按拼音排序ListWaPayFileVO list (ListWaPayFileVO) dao.execQueryBeanList(pagesql, params.toArray(), new BeanListProcessor(WaPayFileVO.class)); if(asc.equals(page.getOrder()) pk_psnjob__pk_psndoc__name.equals(page.getSort())){ Collections.sort(list, new ComparatorWaPayFileVO() { Override public int compare(WaPayFileVO o1, WaPayFileVO o2) { return Collator.getInstance(Locale.CHINESE).compare(o1.getPk_psnjob__pk_psndoc__name(),o2.getPk_psnjob__pk_psndoc__name()); } }); }else if(desc.equals(page.getOrder()) pk_psnjob__pk_psndoc__name.equals(page.getSort())){ Collections.sort(list, new ComparatorWaPayFileVO() { Override public int compare(WaPayFileVO o1, WaPayFileVO o2) { return -Collator.getInstance(Locale.CHINESE).compare(o1.getPk_psnjob__pk_psndoc__name(),o2.getPk_psnjob__pk_psndoc__name()); } }); }jdk自带的Collator包涵的汉字太少了对一些生僻的姓氏不能进行排序。推荐使用import com.ibm.icu.text.Collator;是ibm开发的针对编码的工具包非常好用。附pom文件dependency groupIdcom.ibm.icu/groupId artifactIdicu4j/artifactId version57.1/version /dependency业务场景一个list集合里面add了若干个实体类针对该实体类排序的属性为String。使用技术自定义list排序JDK自带重写Comparator接口的compare方法汉字转拼音技术使用的pinyin4j。pinyin4j官网地址http://pinyin4j.sourceforge.net/不想去官网下载的我这里也有地址为//tempRateList 为需要进行自定义排序的集合SpRate为该集合的实体类riskName为排序的属性。直接上方案1、导入pinyin4j-2.5.0.jar2、对自定义排序的类使用以下方法进行自定义排序Collections.sort(tempRateList,new ComparatorSpRate() {Overridepublic int compare(SpRate s1, SpRate s2) {String o1 s1.getRiskName();String o2 s2.getRiskName();for (int i 0; i o1.length() i o2.length(); i) {int codePoint1 o1.charAt(i);int codePoint2 o2.charAt(i);if (Character.isSupplementaryCodePoint(codePoint1)|| Character.isSupplementaryCodePoint(codePoint2)) {i;}if (codePoint1 ! codePoint2) {if (Character.isSupplementaryCodePoint(codePoint1)|| Character.isSupplementaryCodePoint(codePoint2)) {return codePoint1 - codePoint2;}String pinyin1 PinyinHelper.toHanyuPinyinStringArray((char) codePoint1) null? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint1)[0];String pinyin2 PinyinHelper.toHanyuPinyinStringArray((char) codePoint2) null? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint2)[0];if (pinyin1 ! null pinyin2 ! null) { // 两个字符都是汉字if (!pinyin1.equals(pinyin2)) {return pinyin1.compareTo(pinyin2);}} else {return codePoint1 - codePoint2;}}}return o1.length() - o2.length();}});3、方法结束后 tempRateList 对象就完成了自定义排序

相关新闻

UE5、Unity、ThreeJS怎么选?数字孪生引擎选型干货

UE5、Unity、ThreeJS怎么选?数字孪生引擎选型干货

当你决定要上一个数字孪生项目时,技术选型往往是第一个“拦路虎”。打开搜索引擎,Unreal Engine(UE5)、Unity、Three.js这几个名字会反复出现,每个看起来都能做3D,但彼此的定位和适用场景又截然不同。选错了…

2026/11/13 17:12:21 阅读更多 →
达梦数据库ORDER BY NLSSORT(name,‘NLS_SORT = SCHINESE_PINYIN_M’)汉字排序

达梦数据库ORDER BY NLSSORT(name,‘NLS_SORT = SCHINESE_PINYIN_M’)汉字排序

可以使用 NLSSORT 函数实现此功能,NLSSORT 支持以拼音、笔画、部首排序,示例如下:拼音:SELECT * FROM PEOPLE ORDER BY NLSSORT(name,‘NLS_SORT SCHINESE_PINYIN_M’); 笔划:SELECT * FROM PEOPLE ORDER BY NLSSORT(…

2026/10/21 6:06:41 阅读更多 →
CANNBot-Insight完全指南:Next.js 16+Prisma打造的AI编码代理会话可观测性工具

CANNBot-Insight完全指南:Next.js 16+Prisma打造的AI编码代理会话可观测性工具

CANNBot-Insight完全指南:Next.js 16Prisma打造的AI编码代理会话可观测性工具 【免费下载链接】cannbay2 项目地址: https://ai.gitcode.com/guanxinghua/cannbay2 本文是 CANNBot-Insight 的完整使用指南。CANNBot-Insight 是一款基于 Next.js 16 与 Prisma…

2026/10/24 8:39:42 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/15 5:13:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/15 5:13:35 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/15 5:13:35 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/15 3:37:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/15 4:18:38 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/15 5:13:35 阅读更多 →

日新闻

周新闻

月新闻