首先介绍Oracle 9i新增加的一个系统自带的排序函数 

1、按首字母排序 

在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值     

SCHINESE_RADICAL_M   按照部首(第一顺序)、笔划(第二顺序)排序     

SCHINESE_STROKE_M   按照笔划(第一顺序)、部首(第二顺序)排序     

SCHINESE_PINYIN_M   按照拼音排序 

oracle9i中新增了按照拼音、部首、笔画排序功能 

用法示例:

  1. 拼音
  2. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_PINYIN_M')
  3. 笔划
  4. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_STROKE_M')
  5. 部首
  6. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_RADICAL_M')

2、按首字母拼音查询 

首先我们要创建一个可以查询汉字首字母的函数,函数代码如下:

  1. CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
  2. );
  3. );
  4. FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
  5. BEGIN
  6. RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
  7. END;
  8. BEGIN
  9. ..LENGTH(P_NAME) LOOP
  10. ));
  11. IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN
  12. V_RETURN := V_RETURN || 'a';
  13. ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN
  14. V_RETURN := V_RETURN || 'b';
  15. ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN
  16. V_RETURN := V_RETURN || 'c';
  17. ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN
  18. V_RETURN := V_RETURN || 'd';
  19. ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN
  20. V_RETURN := V_RETURN || 'e';
  21. ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN
  22. V_RETURN := V_RETURN || 'f';
  23. ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN
  24. V_RETURN := V_RETURN || 'g';
  25. ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN
  26. V_RETURN := V_RETURN || 'h';
  27. ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN
  28. V_RETURN := V_RETURN || 'j';
  29. ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN
  30. V_RETURN := V_RETURN || 'k';
  31. ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN
  32. V_RETURN := V_RETURN || 'l';
  33. ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN
  34. V_RETURN := V_RETURN || 'm';
  35. ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN
  36. V_RETURN := V_RETURN || 'n';
  37. ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN
  38. V_RETURN := V_RETURN || 'o';
  39. ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN
  40. V_RETURN := V_RETURN || 'p';
  41. ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN
  42. V_RETURN := V_RETURN || 'q';
  43. ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN
  44. V_RETURN := V_RETURN || 'r';
  45. ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN
  46. V_RETURN := V_RETURN || 's';
  47. ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN
  48. V_RETURN := V_RETURN || 't';
  49. ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN
  50. V_RETURN := V_RETURN || 'w';
  51. ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN
  52. V_RETURN := V_RETURN || 'x';
  53. ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN
  54. V_RETURN := V_RETURN || 'y';
  55. ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN
  56. V_RETURN := V_RETURN || 'z';
  57. END IF;
  58. END LOOP;
  59. RETURN V_RETURN;
  60. END;

随后,我们可以先取出姓名,然后截取第一个汉字,最后取汉字的首字母,即可用来作为查询条件

  1. ,1)) = 'z'

最后展示一个将两个结合起来运用的例子:

  1. select e.expert_id,e.eperson_id,e.fullname,
  2. sum(b2i.browse_num) browsecount,
  3. count(o.object_id),wmsys.wm_concat(distinct d.name)
  4. from expert e
  5. left join expert2disciplinetype e2d on e2d.expert_id = e.expert_id
  6. left join disciplinetype d on d.discipline_type_id = e2d.discipline_type_id
  7. and d.upid = '0'
  8. left join community2expert c2e on c2e.expert_id = e.expert_id
  9. left join item i on i.item_type_id = 'AcademicRes' and i.withdrawn = 'N'
  10. join metadatavalue m on m.item_id = i.item_id and m.metadata_field_id = '64'
  11. join objectpublishinfo o on o.object_id = i.item_id
  12. and o.object_type = 'item' and o.viewobjecttype = 'eperson'
  13. and o.viewobjectid = e.eperson_id and o.state = '1'
  14. and o.publishstate_id = '3'
  15. left join browse2item b2i on b2i.item_id = o.object_id
  16. ,1)) = 'z'
  17. group by e.expert_id,e.eperson_id,e.fullname
  18. order by nlssort(e.fullname,'NLS_SORT=SCHINESE_PINYIN_M')

转自:http://zheng12tian.iteye.com/blog/817571

Oracle 10g如何对用户姓名,按首字母排序、查询的更多相关文章

  1. [转]Oracle 10g如何对用户姓名,按首字母排序、查询

    首先介绍Oracle 9i新增加的一个系统自带的排序函数  1.按首字母排序  在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值      SCHINESE_RADICA ...

  2. 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。

      package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...

  3. php实现姓名按首字母排序的类与方法

    php将名字按首字母进行排序 <?php public function getFirstChar($s){ $s0 = mb_substr($s,0,3); //获取名字的姓 $s = ico ...

  4. mysql、oracle 中按照拼音首字母排序

    mysql中按照拼音首字母排序 convert(name using gbk) ASC 注:name 为字段名称 oracle中按照拼音首字母排序 nlssort(enterprise_name,'N ...

  5. oracle中检索结果汉字首字母排序详解

    今天写需求,要求将结果按照成本中心首字母排序,平且空放在最前面. 进入正题: 1.使用oracle自带的函数: 按照首字母排序:nlssort(xxx,'NLS_SORT=SCHINESE_PINYI ...

  6. C# 汉字获取拼音首字母,给数据库中的姓名添加首字母

    本方案采用微软官方语言包 (下载链接: https://pan.baidu.com/s/10I1bhTdFr4-q_xKVHuEzMA 提取码: p3nk ChnCharInfo.dll 用于获取首字 ...

  7. 获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。

    package com.lixu.tongxunlu; import java.util.ArrayList; import com.lixu.tongxunlu.PinnedSectionListV ...

  8. php按照中文首字母排序

    1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) ...

  9. HashMap加入数据后,会自动根据首字母排序

    1.Map<String, ArrayList<XX>> entityHashMap = new HashMap<>(); 然后增加一些数据,会发现根据String ...

随机推荐

  1. mysql世界国家省市地区的信息中英文

    项目的主要业务是在国外, 所以以前的省市数据不仅不全, 而且没有英文翻译,  幸好在网上找到一个符合要求的数据 感谢: https://github.com/moolighty/geo

  2. Python break 语句

    Python break 语句 Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归 ...

  3. 安卓源码下载 windows

    git clone https://android.googlesource.com/name Name Descriptionaccessories/manifest device/asus/deb ...

  4. iOS:转载sqlite3

     SQLITE3 使用总结 2012-08-21 13:48:28 分类: SQLite/嵌入式数据库 SQLITE3 使用总结 2009-09-16 07:36 2624人阅读 评论(10) 收藏  ...

  5. 融合libevent和protobuf

    写了一个简单的例子,把libevent中的bufferevent网络收发服务和protobuf里面的序列反序列结合起来. protobuf文件message.proto: message PMessa ...

  6. [Todo]提升电商网站性能方面的一些资料材料

    又到国庆,喷一喷12306.cn的技术架构 http://chengxu.org/p/369.html 其中用到了不少比较细节的优化技巧. 提到库存管理是电商非常难的地方.也讲了跟秒杀相关的一些内容.

  7. Node.js:模块系统、函数

    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块, ...

  8. TextView文字横向自己主动滚动

              效果截图:                              watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI4Nj ...

  9. 谷歌浏览器开发调试工具中Sources面板 js调试等 完全介绍

    这次分享的是Chrome开发工具中最有用的面板Sources. Sources面板几乎是我最常用到的Chrome功能面板,也是在我看来决解一般问题的主要功能面板.通常只要是开发遇到了js报错或者其他代 ...

  10. VMWARE虚拟机安装64位系统此主机支持IntelVTx 但IntelVTx处于禁用状态

    1.进入BIOS(我的电脑是Thinkpad e480,进入按钮是F12/ Fn+F12) 2.选择App Menu,再选择第一项Setup,进入 3.选择Security,选择下面第四项Virtua ...