首先介绍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. python接口自动化8-参数化

    前言 前面一篇实现了参数的关联,那种只是记流水账的完成功能,不便于维护,也没什么可读性,接下来这篇可以把每一个动作写成一个函数,这样更方便了. 参数化的思维只需记住一点:不要写死 (由于博客园登录机制 ...

  2. android中共享全局数据的方法

    转自:http://blog.csdn.net/ameyume/article/details/6100756 我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中的所有Activity和Vi ...

  3. easyui datagrid如何获取到每行的文本框

    在return '<input type="text" name="txtCount" class="inputvalue"/> ...

  4. c++ 哈希表(hash表)

    一.定义 Hash表,也称散列表.一般应用于有大量"动态"的插入(删除)和查找操作的一类问题.(如果是"静态"的,通常可以先对数据排序,查找时就可以用" ...

  5. python with和上下文管理工具

    对于系统资源如文件.数据库连接.socket 而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源. 比如 Python 程序打开一个文件,往文件中写内容,写完之后, ...

  6. 《Pro JavaScript Techniques》中的一些函数

    //获取元素的样式值. function getStyle(elem, name) { if (elem.style[name]) { return elem.style[name]; } else ...

  7. Notepad++中设置Windows、Unix、Mac三种行尾换行符格式间的转换

    (1)首先,要设置NotePad++能显示换行符,这个才干看到效果, 视图-->显示符号-->显示行尾符. {2}设置行尾符格式:编辑-->档案格式转换-->(可选Window ...

  8. [HNOI2002]营业额统计 Splay tree入门题

    题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec   ...

  9. Windows 批处理 ping 某个网段

    原文: https://blog.csdn.net/leuxcn/article/details/51288248 ------------------------------------------ ...

  10. 10个CSS简写技巧让你永远受用

    转自:http://blog.bingo929.com/10-css-shorthand-tips.html 前言: CSS简写就是指将多行的CSS属性声明化成一行,又称为CSS代码优化.CSS简写的 ...