首先介绍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

作者:a497785609 发表于2014-3-22 10:25:26 原文链接
阅读:136 评论:0 查看评论

[转]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. ORACLE 10g、11g批量刷新用户密码

    一.ORACLE 10g批量刷新用户密码 select 'alter user ' || username ||' identified by values '''||password ||''';' ...

  8. 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

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

  9. Oracle 10g安全加固(审计、监听密码)

    环境: Linux 6.4 + Oracle 10.2.0.4 1. Oracle 10g 审计功能 2. 对数据库监听器的关闭和启动设置密码 1. Oracle 10g 审计功能 Oracle 10 ...

随机推荐

  1. SourceInsight中文字体

    转载自: http://blog.chinaunix.net/uid-29094179-id-3889999.html 1.正确显示中文注释 1)Options->Style Propertie ...

  2. MRIcro tutorial -- mricro 教程

      MRIcro tutorial 参考网址:http://www.mccauslandcenter.sc.edu/mricro/mricron/ http://www.cabiatl.com/mri ...

  3. Visual Studio 2013 新增web项目IIS Express的64位版

    使用Visual Studio 2012开发SharePoint的应该都遇到过下面的错误“SharePoint 在32位进程中不受支持”,而怎么修改目标平台都不好使,因为VS 2012所配备的IIS ...

  4. Andorid之Annotation框架初使用(二)

    Fragment: @EActivity(R.layout.fragments) public class MyFragmentActivity extends FragmentActivity { ...

  5. Spark应用程序运行的日志存在哪里(转)

    原文链接:Spark应用程序运行的日志存在哪里 在很多情况下,我们需要查看driver和executors在运行Spark应用程序时候产生的日志,这些日志对于我们调试和查找问题是很重要的. Spark ...

  6. 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系

    UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...

  7. android4.0 USB Camera实例(三)UVC

    前面我写了两篇文章说明了zc301的实现 详细请看 http://blog.csdn.net/hclydao/article/details/21235919 以下顺便把通用的USB也写上 前面的ZC ...

  8. http响应报文,如果响应的内容比较大,客户端怎么样判断接收完了呢?

    1.   http协议有正文大小说明的content-length 2. 或者分块传输chunked的话  读到0\r\n\r\n 就是读完了 ---------------------------- ...

  9. 利用VS2010开发一个跳转页面aspx

    在开发项目的过程中,由于要集成Cognos的报表通过URL,但是Cognos报表的本身URL长度过程,那么此时就需要开发一个跳转的页面,下面我们就采用VS2010开发一个跳转的页面Default.as ...

  10. 【Python】理想论坛每小时发帖量统计图表

    写以下代码的目的是分析一天中各时段理想论坛中用户发帖回帖的活跃程度,获得结尾那张图表是核心. 以下代码两种爬虫协助,论坛爬虫先爬主贴,爬到主贴后启动帖子爬虫爬子贴,然后把每个子贴的发表时间等存入数据库 ...