关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
首先介绍Oracle 9i新增加的一个系统自带的排序函数
1、按首字母排序
在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
oracle9i中新增了按照拼音、部首、笔画排序功能
用法示例:
- 拼音
- SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_PINYIN_M')
- 笔划
- SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_STROKE_M')
- 部首
- SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_RADICAL_M')
2、按首字母拼音查询
首先我们要创建一个可以查询汉字首字母的函数,函数代码如下:
- 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 VARCHAR2) RETURN VARCHAR2 AS
- BEGIN
- RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
- END;
- BEGIN
- FOR I IN 1..LENGTH(P_NAME) LOOP
- V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));
- IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN
- V_RETURN := V_RETURN || 'a';
- ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN
- V_RETURN := V_RETURN || 'b';
- ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN
- V_RETURN := V_RETURN || 'c';
- ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN
- V_RETURN := V_RETURN || 'd';
- ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN
- V_RETURN := V_RETURN || 'e';
- ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN
- V_RETURN := V_RETURN || 'f';
- ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN
- V_RETURN := V_RETURN || 'g';
- ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN
- V_RETURN := V_RETURN || 'h';
- ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN
- V_RETURN := V_RETURN || 'j';
- ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN
- V_RETURN := V_RETURN || 'k';
- ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN
- V_RETURN := V_RETURN || 'l';
- ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN
- V_RETURN := V_RETURN || 'm';
- ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN
- V_RETURN := V_RETURN || 'n';
- ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN
- V_RETURN := V_RETURN || 'o';
- ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN
- V_RETURN := V_RETURN || 'p';
- ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN
- V_RETURN := V_RETURN || 'q';
- ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN
- V_RETURN := V_RETURN || 'r';
- ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN
- V_RETURN := V_RETURN || 's';
- ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN
- V_RETURN := V_RETURN || 't';
- ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN
- V_RETURN := V_RETURN || 'w';
- ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN
- V_RETURN := V_RETURN || 'x';
- ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN
- V_RETURN := V_RETURN || 'y';
- ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN
- V_RETURN := V_RETURN || 'z';
- END IF;
- END LOOP;
- RETURN V_RETURN;
- END;
随后,我们可以先取出姓名,然后截取第一个汉字,最后取汉字的首字母,即可用来作为查询条件
- select e.fullname,e.expert_id from expert e where f_trans_pinyin_capital(substr(e.fullname,1,1)) = 'z'
最后展示一个将两个结合起来运用的例子:
- select e.expert_id,e.eperson_id,e.fullname,
- sum(b2i.browse_num) browsecount,
- count(o.object_id),wmsys.wm_concat(distinct d.name)
- from expert e
- left join expert2disciplinetype e2d on e2d.expert_id = e.expert_id
- left join disciplinetype d on d.discipline_type_id = e2d.discipline_type_id
- and d.upid = '0'
- left join community2expert c2e on c2e.expert_id = e.expert_id
- left join item i on i.item_type_id = 'AcademicRes' and i.withdrawn = 'N'
- join metadatavalue m on m.item_id = i.item_id and m.metadata_field_id = '64'
- join objectpublishinfo o on o.object_id = i.item_id
- and o.object_type = 'item' and o.viewobjecttype = 'eperson'
- and o.viewobjectid = e.eperson_id and o.state = '1'
- and o.publishstate_id = '3'
- left join browse2item b2i on b2i.item_id = o.object_id
- where e.state = '1' and f_trans_pinyin_capital(substr(e.fullname,1,1)) = 'z'
- group by e.expert_id,e.eperson_id,e.fullname
- order by nlssort(e.fullname,'NLS_SORT=SCHINESE_PINYIN_M')
转载于:https://www.cnblogs.com/telwanggs/p/6855491.html
关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案相关推荐
- 使用Java对中文首字母进行排序
前言 最近由于工作需求,需要对行政区划根据中文首字母进行排序,在网上查了些资料,没有什么收获,基本上都是千篇一律.相互"借鉴".因此本人在此做一个整理,以备后续不时之需. 废话不多 ...
- oracle中md5算法,oracle数据库中存储过程使用MD5算法加密
一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFU ...
- oracle数据库中索值,Oracle数据库中的索引详解
Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...
- oracle中call用法,Oracle数据库中 call 和 exec的区别
Oracle数据库中 call 和 exec的区别 今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: ex ...
- oracle数据库中常用语法,oracle数据库常用语法(中文注释版)
-- 查看系统所有变量值 show all -- 显示当前连接用户 show user -- 显示表结构 desc 表名 -- 显示错误 show error -- 退出 exit; 表空间是数据库中 ...
- Java通过mybatis插入Oracle数据库中Date格式不显示到时分秒问题
我在用mybatis generator生成代码后,执行查询语句时,Oracle里的Date类型字段只精确到年月日,后面时分秒都为零. 后来发现是jdbcType问题,改成 jdbcType=&quo ...
- java sdo_geometry,批量修改oracle数据库中sdo_geometry字段的SRID
1,在user_sdo_geom_metadata表中插入或者修改需要修改表的名称,表中的geometry字段名称和srid.具体可参考该表的字段. INSERT INTO USER_SDO_GEOM ...
- 使用java代码动态在oracle数据库中动态创建表
一.jdbcTemplate的配置 package com.djhu.followup.config; import com.alibaba.druid.pool.DruidDataSource;im ...
- mysql 数据库中数据去重,oracle数据库中如何达到像mysql数据库中group by 那种去重的效果..求大神解答...
满意答案 oracle和mysql,group by是由区别的. oracle的gruop by 后跟的必须是select查询出的字段 而且group by语句中select指定的字段必须是" ...
最新文章
- 提花原理与计算机,电脑提花袜的设计原理与方法:提花女袜
- 在线翻译系统属于计算机应用领域中,【单选题】网状物编织物和机件上的滚花部分,可以在轮廓线附件用( )线示意画出...
- 网络推广外包——网络推广外包浅析那些年起步就结束的企业网站
- atmega8 Flash的使用
- JSR 303 - Bean Validation 介绍及最佳实践
- 在 Azure App Service 上启用 Application Request Routing
- mysql字段唯一确定_验证表里某不确定的字段的值是否唯一的方法?
- 手机号正则表达 php,php 手机号码正则表达试程序代码_PHP教程
- 最佳的开源云项目有哪些?
- python 趣味编程课_青少年编程:Python趣味编程基础入门课程
- Microsoft AJAX Library的beta2版发布
- MADlib——基于SQL的数据挖掘解决方案(7)——数据转换之其它转换
- android 9.0 SystemUI状态栏下拉快捷添加截图快捷开关
- iOS教程:移动终端游戏动画设计的12个原则
- base64编码类------原始码(C#)
- oracle cosh 函数,oracle cosh exp floor in log等函数
- 【随机过程】13 - 过滤泊松的应用
- easy-table-vue+Vue、SpringBoot+Mybatis实现MVVM模型前后台数据交互
- 超700名研究生被清退,硕博生毕业,更难了
- 【图片新闻】近日一架美军F/A-18E战斗机在星球大战峡谷附近坠毁
热门文章
- 5010.有限状态机-电梯事件
- STM32中断与事件
- JLink v8固件丢失修复教程
- ajax nginx 转发 sessionid_「查缺补漏」巩固你的Nginx知识体系
- 【Pre蓝桥杯嵌入式】【STM32】学习索引
- clock_gettime系统调用详解
- Linux输入子系统:事件的编码 -- event-codes.txt
- JDK1.8的新特性详解
- java imageicon 路径_java awt ImageIcon icon 相对路径设置
- java对list里面按照分数排名_提前批警校排名,部属警校去省厅,省级警校去乡镇吗...