[转]Oracle 10g如何对用户姓名,按首字母排序、查询
首先介绍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
- );
- );
- FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
- BEGIN
- RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
- END;
- BEGIN
- ..LENGTH(P_NAME) LOOP
- ));
- 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;
随后,我们可以先取出姓名,然后截取第一个汉字,最后取汉字的首字母,即可用来作为查询条件
- ,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
- ,1)) = 'z'
- group by e.expert_id,e.eperson_id,e.fullname
- order by nlssort(e.fullname,'NLS_SORT=SCHINESE_PINYIN_M')
转自:http://zheng12tian.iteye.com/blog/817571
[转]Oracle 10g如何对用户姓名,按首字母排序、查询的更多相关文章
- Oracle 10g如何对用户姓名,按首字母排序、查询
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICA ...
- 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。
package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...
- php实现姓名按首字母排序的类与方法
php将名字按首字母进行排序 <?php public function getFirstChar($s){ $s0 = mb_substr($s,0,3); //获取名字的姓 $s = ico ...
- mysql、oracle 中按照拼音首字母排序
mysql中按照拼音首字母排序 convert(name using gbk) ASC 注:name 为字段名称 oracle中按照拼音首字母排序 nlssort(enterprise_name,'N ...
- oracle中检索结果汉字首字母排序详解
今天写需求,要求将结果按照成本中心首字母排序,平且空放在最前面. 进入正题: 1.使用oracle自带的函数: 按照首字母排序:nlssort(xxx,'NLS_SORT=SCHINESE_PINYI ...
- C# 汉字获取拼音首字母,给数据库中的姓名添加首字母
本方案采用微软官方语言包 (下载链接: https://pan.baidu.com/s/10I1bhTdFr4-q_xKVHuEzMA 提取码: p3nk ChnCharInfo.dll 用于获取首字 ...
- ORACLE 10g、11g批量刷新用户密码
一.ORACLE 10g批量刷新用户密码 select 'alter user ' || username ||' identified by values '''||password ||''';' ...
- 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M ...
- Oracle 10g安全加固(审计、监听密码)
环境: Linux 6.4 + Oracle 10.2.0.4 1. Oracle 10g 审计功能 2. 对数据库监听器的关闭和启动设置密码 1. Oracle 10g 审计功能 Oracle 10 ...
随机推荐
- ClientDataSet的版本兼容性
ClientDataSet的版本兼容性 在Delphi的早期版本中,Data这个Variant类型的值内部使用的是AnsiString来存贮的字节流,但我并不确定Delphi从什么时候开始,将其改为了 ...
- End of Life check fails with NullPointerException
Checks if the running version of JIRA is approaching, or has reached End of Life. Details Type: Bug ...
- FIS常用命令
命令 用途 简写 fis --version 查看版本 fis -v fis install 安装 fis release 发布项目 fis server start 启动一个服务器用于预览项 ...
- L脚本语言语法手冊 0.10版
L脚本语言语法手冊 0.10版 简 介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...
- threading.local()、多线程里全局变量锁
这个人的系列文章值得一读:http://blog.51cto.com/suhaozhi/category3.html/p2,不过这个系列总共15偏,Python并发入门,有很多文字描述错误,有些道理也 ...
- iOS:第三方数据库文件FMDB的使用
第三方数据库FMDB •FMDB的使用:在sqlite的基础上,将sqlite中的函数进行封装产生的一个数据库文件. –FMDB的好处是对基本C库的封装,方便使用.同时还提供了多线程操作数据库带来的读 ...
- oracle分析函数之windowing_clause--rows
Some analytic functions allow the windowing_clause. In the listing of analytic functions at the end ...
- Android -- 动态添加布局
在做项目的时候,遇到了scrollView与listView结合的使用,导致了滑动的混乱,但是有一个办法可以解决掉这个问题,就是手写listView的高度,还有另外一种方法,传送门:<Andro ...
- Mac怎样改动开机password
Mac开机password忘了,咋办?开不开机啦 1.打开你的Mac,command +S 进入你的终端界面 2.输入/sbin/mount -uaw / 3.输入rm /var/db/.AppleS ...
- 一些C++11语言新特性 - Range-Based for Loops
1. Range-Based for Loops for ( decl : coll ) { statement} eg: , , , , , , , } ) { std::cout << ...